Spring 學習筆記(四)IOC之註解方式
阿新 • • 發佈:2018-12-16
用註解向IOC容器增加javaBean配置,還有一些注入的註解
第一步:添加註解的jar包
spring-aop-4.3.3.RELEASE.jar
第二步:applicationContext.xml檔案中開啟註解
注意beans標籤內增加了context的名稱空間和約束
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--引入context的名稱空間--> <!--開啟註解,配置要掃描的包--> <context:component-scan base-package="org.spring.exampleAOP" /> </beans>
第三步:就可以使用註解嘍
- 建立物件,四種註解的效果是一樣的,估計就是傳說中的約定吧
- @Component 建立物件 普通Spring專案
- @Repository 建立物件 持久層 分層專案
- @Service 建立物件 Service層 分層專案
- @Controll 建立物件 web層 分層專案
@Scope("引數"),還是單例/多例/session/request的意思
@Component //相當於bean標籤, beanName預設首字母小寫
@Scope("singleton") //等同bean標籤中的scope
public class Sadamu implements People {
- 注入
1. 普通注入:@Value("${people}"),支援EL表示式, 這個用的挺多的還,比如專案中經常在配置檔案中設定全域性變數啥的(比如站點名稱、jdbc配置啥的)
現在applicationContext.xml中裝入properties檔案,然後EL表示式就可以取到啦。
<!--裝入配置檔案 properties--> <context:property-placeholder location="classpath:my.properties" />
2. 物件注入
@Autowired 自動裝配(按型別) , 可以在描述介面,自動裝配一個介面的實現類, 只能是一個,不能沒有實現類。
當出現多個實現類的時候,必須用@Qualifer(value="XXX")註解進行說明要注入哪個實現類,否則會報錯。
@Component //相當於bean標籤, beanName預設首字母小寫
@Scope("singleton") //等同bean標籤中的scope
public class Sadamu implements People {
//自動裝載,自動根據變數型別進行注入, 如果IOC容器沒有這個類就會報錯, 有多個也不行
@Autowired
@Qualifier(value = "kazhafei") //當Autowired出現多個實現的時候, 必須用Qualifier指定注入名稱
public People people;
@Resource 註解是@Autowired和@Qualifer註解的合體,既能按型別注入也能按名稱注入,推薦使用
@Resource(name = "kazhafei") //@Autowired(根據型別注入)和@Qualifier(選擇名稱)兩個註解的合體,
public Kazhafei kazhafei;
另:@Autowired來自spring,@Resource來自javaEE
package org.springframework.beans.factory.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
-----------------------------------------------------------------------------
package javax.annotation;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {....
- 其他註解(部分,日後慢慢填吧)
@PostConstruct //初始化方法註解
public void init(){
System.out.println("IOCinit:薩達姆初始化");
}
@PreDestroy //銷燬方法註解
public void destroy(){
System.out.println("IOCdestroy:薩達姆銷燬");
}