javascript
Spring - IOC常用标签
在使用Spring容器管理我們項(xiàng)目的時(shí)候,我們可以使用xml的方式或者注解的方式。二者適用的場(chǎng)景分別是Bean來(lái)自第三方和Bean由開(kāi)發(fā)者自己實(shí)現(xiàn)。 我們可以根據(jù)不同情況使用不同的方式。這里主要對(duì)注解方式進(jìn)行說(shuō)明.
其中5.Spring的新注解和前面4節(jié)的注解功能是一樣的。但是不再使用前4節(jié)所說(shuō)的注解來(lái)配置,而是引入了配置類(lèi)的概念,和我們寫(xiě)xml也是一樣的。在配置類(lèi)中的內(nèi)容,你都可以翻譯成前4節(jié)所說(shuō)的注解,或者xml文件。
文章目錄
- 1.用于創(chuàng)建對(duì)象的注解
- 1.1 @Component
- 1.2 @Controller @Service @Repository
- 2.用于注入數(shù)據(jù)的注解
- 2.1 @Autowired
- 2.2 @Qualifier
- 2.3 @Resource
- 2.4 @Value
- 3.用于指定作用范圍的注解
- 3.1 @Scope
- 4.用于生命周期的注解
- 4.1 @PostConstruct
- 4.2 @PreDestroy
- 5.Spring的新注解
- 5.1 @Configuration
- 5.2 @ComponentScan
- 5.3 @Bean
- 5.4 @PropertySource
- 5.5 @Import
1.用于創(chuàng)建對(duì)象的注解
相當(dāng)于 <bean id="" class="">
1.1 @Component
作用:
把資源讓spring來(lái)管理。相當(dāng)于在xml中配置一個(gè)bean。
屬性:
value:指定bean的id。如果不指定value屬性,默認(rèn)bean的id是當(dāng)前類(lèi)的類(lèi)名,并且首字母小寫(xiě)。
示例
1.2 @Controller @Service @Repository
他們?nèi)齻€(gè)注解都是針對(duì)@Component的衍生注解,他們的作用及屬性都是一模一樣的,只不過(guò)是提供了更加明確的語(yǔ)義化。
- @Controller:一般用于表現(xiàn)層的注解。
- @Service:一般用于業(yè)務(wù)層的注解。
- @Repository:一般用于持久層的注解。
細(xì)節(jié):如果注解中有且只有一個(gè)屬性要賦值時(shí),且名稱(chēng)是value,value在賦值是可以不寫(xiě)。
2.用于注入數(shù)據(jù)的注解
相當(dāng)于:<property name="" ref="">或者<property name="" value="">
在類(lèi)中使用這些注解還有一個(gè)好處就是,不用像我們?cè)陬?lèi)中一樣,需要獲取容器。而是直接將需要的Bean注入即可。比如如果不使用注解的話(huà),你可能需要在類(lèi)中這樣寫(xiě),以此來(lái)獲取AccountService實(shí)例對(duì)象:
public class AccountServiceTest { private ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); private IAccountService as = ac.getBean("accountService",IAccountService.class); }2.1 @Autowired
作用:
自動(dòng)按照類(lèi)型注入。當(dāng)使用注解注入屬性時(shí),set方法可以省略。它只能注入其他bean類(lèi)型。當(dāng)有多個(gè)類(lèi)型匹配時(shí),使用要注入的對(duì)象變量名稱(chēng)作為bean的id,在spring容器查找,找到了也可以注入成功。找不到就報(bào)錯(cuò)。
示例
2.2 @Qualifier
作用:
在自動(dòng)按照類(lèi)型注入的基礎(chǔ)之上,再按照Bean的id注入。它在給字段注入時(shí)不能獨(dú)立使用,必須和@Autowire一起使用;但是給方法參數(shù)注入時(shí),可以獨(dú)立使用。
屬性:
value:指定bean的id。
示例
2.3 @Resource
作用:
直接按照Bean的id注入。它只能注入其他bean類(lèi)型(而不是普通數(shù)據(jù)類(lèi)型和String)。相當(dāng)于上面兩個(gè)標(biāo)簽的共同作用
屬性:
name:指定bean的id。
示例
2.4 @Value
作用:
以上三個(gè)注解只能注入Bean類(lèi)型數(shù)據(jù),而不能注入普通類(lèi)型,并且集合類(lèi)型只能使用XML來(lái)注入,而@Value是用來(lái)注入基本數(shù)據(jù)類(lèi)型和String類(lèi)型數(shù)據(jù)的 ,并且支持使用spEL(Spring EL表達(dá)式${})
屬性:
value:用于指定值
示例:
3.用于指定作用范圍的注解
相當(dāng)于:<bean id="" class="" scope="">中的scope
3.1 @Scope
作用:
指定bean的作用范圍。
屬性:
value:指定范圍的值。 取值:
- singleton 單例,默認(rèn)
- prototype 多例
- request
- session
- globalsession
例子:
@Component("accountService") @Scope("prototype") public class AccountServiceImpl implements IAccountService {public void saveAccount(){} }4.用于生命周期的注解
相當(dāng)于:<bean id="" class="" init-method="" destroy-method="" />中的init-method和destroy-method
4.1 @PostConstruct
作用:
用于指定初始化方法。
4.2 @PreDestroy
作用:
用于指定銷(xiāo)毀方法。
例子:
5.Spring的新注解
5.1 @Configuration
作用:
用于指定當(dāng)前類(lèi)是一個(gè)spring配置類(lèi),當(dāng)創(chuàng)建容器時(shí)會(huì)從該類(lèi)上加載注解。獲取容器時(shí)需要使用AnnotationApplicationContext(注解類(lèi).class)。 如果是使用AnnotationApplicationContext來(lái)引入或者被其他配置類(lèi)導(dǎo)入(5.5 @Import),可以不用寫(xiě)這個(gè)標(biāo)簽。
屬性:
value:用于指定配置類(lèi)的字節(jié)碼
示例:
5.2 @ComponentScan
作用:
用于指定spring在初始化容器時(shí)要掃描的包。作用和在spring的xml配置文件中的: <context:component-scan base-package="com.itheima"/>是一樣的。
屬性:
basePackages:用于指定要掃描的包。和該注解中的value屬性作用一樣。
示例:
5.3 @Bean
作用:
該注解只能寫(xiě)在方法上,表明使用此方法創(chuàng)建一個(gè)對(duì)象,并且放入spring容器。可以在方法上使用@Scope來(lái)指示作用范圍。
屬性:
name:給當(dāng)前@Bean注解方法創(chuàng)建的對(duì)象指定一個(gè)名稱(chēng)(即bean的id)。當(dāng)不寫(xiě)時(shí),默認(rèn)值是當(dāng)前方法的名稱(chēng)。當(dāng)有參數(shù)的時(shí)候和@Autowired的方式是一樣的
示例(有參數(shù)和無(wú)參數(shù)):
5.4 @PropertySource
作用:
用于加載.properties文件中的配置。例如我們配置數(shù)據(jù)源時(shí),可以把連接數(shù)據(jù)庫(kù)的信息寫(xiě)到properties配置文件中,就可以使用此注解指定properties配置文件的位置。
屬性:
value[]:用于指定properties文件位置。如果是在類(lèi)路徑下,需要寫(xiě)上classpath:
示例:
jdbcConfig.properties文件內(nèi)容
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/eesy jdbc.username=root jdbc.password=12345.5 @Import
作用:
用于導(dǎo)入其他配置類(lèi),在引入其他配置類(lèi)時(shí),其他配置類(lèi)可以不用再寫(xiě)@Configuration注解。當(dāng)然,寫(xiě)上也沒(méi)問(wèn)題。
屬性:
value[]:用于指定其他配置類(lèi)的字節(jié)碼。
示例:
總結(jié)
以上是生活随笔為你收集整理的Spring - IOC常用标签的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java Web - 服务器中的过滤器和
- 下一篇: Spring IOC示例代码