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