Java Spring-注解進行屬性注入


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/>,就可以使屬性注入的注解生效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM