[TOC]java
在類定義、方法定義、成員變量定義前使用,格式:@註解標記名spring
理解與回顧: 使用Spring IOC 管理對象(定義bean、bean的控制(scope/init-method等屬性))及對象關係(DI: set注入/構造器注入)。 控制反轉:改變了對象獲取方式。 new方式獲取 --> spring容器建立對象以後注入進來使用。下降了耦合。ui
###1. 組件自動掃描 指定包路徑,將包下全部組件進行掃描,組件類定義前有註解標記則會掃描到Spring容器。this
基於註解的組件掃描方式:spa
spring.xml ... <context:component-scan base-package="org.***" /> ...
@Component("idName") //掃描ExampleBean 組件,默認id=exampleBean //@ComponentScan // 註解方式開啓組件掃描 @Scope("singleton") // 等價於<bean scope="">,默認單例。 public class ExampleBean { @PostConstruct //等價於<bean init-method="" > public void init() { System.out.println("初始化邏輯"); } @PreDestroy // 等價於<bean destroy-method="" > public void destroy() { System.out.println("釋放資源,釋放spring容器對象資源,觸發單例對象的destroy-method"); } public void excute() { System.out.println("do sth"); } }
@Resource:由JDK提供,能夠定義在變量前或者setXXX方法前。code
@Autowired:由Spring提供,能夠定義在變量前或者setXXX方法前。 兩者均可以實現注入,不存在多個匹配類型,使用Resource和Autowired均可以。 若是存在多個匹配類型,能夠按名稱注入: @Resource(name="指定名稱") 或 @Autowired @Qualifier("指定名稱")component
舉例:xml
@Component public class Student { //須要調用Computer和Phone對象 @Autowired private Computer c; //注入Computer對象 //使用註解set方法也可省略,xml的配置方式不能省略(set注入方式) //public void setC{ // this.c = c; //} @Autowired(required=false) // 設置required屬性爲false,會嘗試自動注入,若沒有匹配的bean,則未注入,p仍爲null。 //@Qualifier("p") //指定名稱注入 private Phone p; //注入Phone對象 ... }
username=root password=123456
spring.xml對象
<util:properties id="db" location="classath:xxx.properties"> </util:properties>
三種配置方案:1. xml中顯示配置; 2. java中顯示配置; 3. 組件掃描,自動注入。資源
本身寫的組件用簡潔的**註解方式自動注入(裝配)**便可; 第三方組件沒法在其類上添加@Component和@AutoWired註解,必須用XML或JavaConfig 顯式配置。 總之,以注入方式成全對象依賴關係,實現了組件解耦。