2017-11-06 21:19:43
一、Spring的注解裝配Bean
Spring2.5 引入使用注解去定義Bean
- @Component 描述Spring框架中Bean
Spring的框架中提供了與@Component注解等效的三個注解
- @Repository 用於對DAO實現類進行標注(dao層)
- @Service 用於對Service實現類進行標注(service層)
- @Controller 用於對Controller實現類進行標注(web層)
//因為只有一個屬性value,所以可以直接寫。一般需要value="..." @Component("user") public class User { public void sayHello(){ System.out.println("Hello World."); } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 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"> <!-- bean definitions here --> <context:component-scan base-package="spring5"/> </beans>
二、注解進行屬性注入
普通屬性:@Value(value="..."),這時候可以不寫setter方法
對象屬性:@Resource(name = "....")
或者采用 @Autowired
@Qualifier(value = "plane")
//因為只有一個屬性value,所以可以直接寫。一般需要value="..." @Component("user") public class User { @Value(value="Spring") private String s; public void sayHello(){ System.out.println("Hello World."); } @Override public String toString() { return "User{" + "s='" + s + '\'' + '}'; } }
三、XML和注解的混合使用
兩種方式結合:一般使用XML注冊Bean,使用注解進行屬性的注入
首先介紹一些其他的注解配置:
(1)配置 Bean 初始化方法和銷毀方法 :
* init-method 和 destroy-method.
- @PostConstruct 初始化
- @PreDestroy 銷毀
@PostConstruct public void setup(){ System.out.println("初始化..."); } @PreDestroy public void teardown(){ System.out.println("銷毀..."); }
(2) 配置 Bean 的作用范圍 :@Scope
@Component("user") @Scope(value="prototype") public class User { @Value(value="Spring") private String s; public void sayHello(){ System.out.println("Hello World."); } @Override public String toString() { return "User{" + "s='" + s + '\'' + '}'; } }
(3)使用Java類來進行配置信息,在XML中掃描一下即可
@Configuration public class BeanConfig { @Bean(name = "car") public Car showCar() { Car car = new Car(); car.setName("長安"); car.setPrice(40000d); return car; } @Bean(name = "product") public Product initProduct() { Product product = new Product(); product.setName("空調"); product.setPrice(3000d); return product; } }
混合使用范例:
public class Person { @Autowired @Qualifier("car") private Car car; @Autowired @Qualifier(value = "plane") private Plane plane; @Override public String toString() { return "Person{" + "car=" + car + ", plane=" + plane + '}'; } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 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"> <!-- bean definitions here --> <!--使屬性注入注解生效--> <context:annotation-config/> <bean id="car" class="spring6.Car"/> <bean id="plane" class="spring6.Plane"/> <bean id="person" class="spring6.Person"> </bean> </beans>
四、集成Junit測試
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:spring-config.xml") public class spring6 { @Autowired @Qualifier("person") private Person p; @Test public void demo(){ System.out.println(p); } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 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"> <!-- bean definitions here --> <!--使屬性注入注解生效--> <context:annotation-config/> <bean id="car" class="spring6.Car"/> <bean id="plane" class="spring6.Plane"/> <bean id="person" class="spring6.Person"> </bean> </beans>
如果是注解進行的類注冊,那么需要使用<context:component-scan base-package="spring5"/>來掃包,
不過一般bean的注冊還是在XML文件中聲明的,所以在注解方式中用的比較多的就是屬性的注入操作了,這種操作只需要加上<context:annotation-config/>,就可以使屬性注入的注解生效。