@Component
做用:mysql
調用無參構造建立一個bean對象,並把對象存入Spring的IoC容器,交由Spring容器進行管理。至關於在xml中配置一個Bean。
屬性:sql
value:指定Bean的id。若是不指定value屬性,默認Bean的id是當前類的類名,首字母小寫。
子註解:
如下三個註解是從@Component派生出來的,它們的做用與@Component是同樣的,Spring增長這三個註解是爲了在語義行區分MVC三層架構對象。架構
@Component:用於註冊非表現層、業務層、持久層的對 @Controller:用於註冊表現層對象 @Service:用於註冊業務層對象 @Reposity:用於註冊持久層對象
@Bean
做用:框架
用於把當前方法的返回值(對象)做爲Bean對象存入Spring的IoC容器中(註冊Bean)
屬性:ui
name/value:用於指定Bean的id。當不寫時,默認值是當前方法的名稱。注意:當咱們使用註解配置方法時,若是方法有參數,Spring框架會去容器中查找有沒有可用的Bean對象,查找的方式和Autowired註解的方式是同樣的。
案例:url
@Configuration public class JdbcConfig { /** * 用於建立QueryRunner對象 * @param dataSource * @return */ @Bean(value = "queryRunner") public QueryRunner createQueryRunner(DataSource dataSource) { return new QueryRunner(dataSource); } /** * 建立數據源對象 * @return */ @Bean(value = "dataSource") public DataSource createDataSource() { try { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver"); comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); comboPooledDataSource.setUser("root"); comboPooledDataSource.setPassword("root"); return comboPooledDataSource; }catch (Exception e) { throw new RuntimeException(e); } } }
@Autowired
做用:code
@Autowire和@Resource都是Spring支持的註解形式動態裝配Bean的方式。Autowire默認按照類型(byType)裝配,若是想要按照名稱(byName)裝配,需結合@Qualifier註解使用。
屬性:xml
required:@Autowire註解默認狀況下要求依賴對象必須存在。若是不存在,則在注入的時候會拋出異常。若是容許依賴對象爲null,需設置required屬性爲false。
案例:對象
@Autowired /* Autowire默認按照類型(byType)裝配 */ // @Autowired(required = false) /* @Autowire註解默認狀況下要求依賴對象必須存在。若是不存在,則在注入的時候會拋出異常。若是容許依賴對象爲null,需設置required屬性爲false。 */ // @Qualifier("userService") /* 按照名稱(byName)裝配 */ private UserService userService;
@Qualifier
做用:生命週期
@Autowired是按照名稱(byName)裝配,使用了@Qualifier註解以後就變成了按照名稱(byName)裝配。它在給字段注入時不能獨立使用,必須和@Autowire一塊兒使用;可是給方法參數注入時,能夠獨立使用。
屬性:
value:用於指定要注入的bean的id,其中,該屬性能夠省略不寫。
案例:
@Autowire @Qualifier(value="userService") //@Qualifier("userService") //value屬性能夠省略不寫 private UserService userService;
@Resource
做用:
@Autowire和@Resource都是Spring支持的註解形式動態裝配bean的方式。@Resource默認按照名稱(byName)裝配,名稱能夠經過name屬性指定。若是沒有指定name,則註解在字段上時,默認取(name=字段名稱)裝配。若是註解在setter方法上時,默認取(name=屬性名稱)裝配。
屬性:
name:用於指定要注入的bean的id type:用於指定要注入的bean的type
裝配順序
1.若是同時指定name和type屬性,則找到惟一匹配的bean裝配,未找到則拋異常; 2.若是指定name屬性,則按照名稱(byName)裝配,未找到則拋異常; 3.若是指定type屬性,則按照類型(byType)裝配,未找到或者找到多個則拋異常; 4.既未指定name屬性,又未指定type屬性,則按照名稱(byName)裝配;若是未找到,則按照類型(byType)裝配。
案例:
@Resource(name="userService") //@Resource(type="userService") //@Resource(name="userService", type="UserService") private UserService userService;
@Value
做用:
經過@Value能夠將外部的值動態注入到Bean中,能夠爲基本類型數據和String類型數據的變量注入數據
案例:
// 1.基本類型數據和String類型數據的變量注入數據 @Value("tom") private String name; @Value("18") private Integer age; // 2.從properties配置文件中獲取數據並設置到成員變量中 // 2.1jdbcConfig.properties配置文件定義以下 jdbc.driver \= com.mysql.jdbc.Driver jdbc.url \= jdbc:mysql://localhost:3306/eesy jdbc.username \= root jdbc.password \= root // 2.2獲取數據以下 @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password;
@PostConstruct
做用:
指定初始化方法
案例:
@PostConstruct public void init() { System.out.println("初始化方法執行"); }
@PreDestroy
做用:
指定銷燬方法
案例:
@PreDestroy public void destroy() { System.out.println("銷燬方法執行"); }