spring IOC装配Bean(注解方式) 1 Spring的注解装配Bean 2 Bean的属性注入: 3 Bean其他的属性的配置: 4 Spring3.0提供使用Java类定义Bean信息的方法 5 实际开发中使用XML还是注解?

(1) Spring2.5 引入使用注解去定义Bean

  • @Component 描述Spring框架中Bean

(2) Spring的框架中提供了与@Component注解等效的三个注解:

  • @Repository 用于对DAO实现类进行标注
  • @Service 用于对Service实现类进行标注
  • @Controller 用于对Controller实现类进行标注
    ***** 三个注解为了后续版本进行增强的.,这三个注解的作用也就是说可以更好的为mvc层每一层做个说明。
    注意:配置文件中一定要加xld的引用,同时要加一个标签
    <context:component-scan base-package="cn.uestc.spring3"/>
    扫描某个包下面的类让他可以使用注解方式
@Component("helloService")
public class HelloService {
    public HelloService() {
        System.out.println("start");
    }

    public void sayHello () {
        System.out.println("hello");
    }
}

2 Bean的属性注入:

(1) 普通属性;

@Value(value="itcast")
private String info;

(2) 对象属性:

  • @Autowired:自动装配默认使用类型注入.
  • @Autowired
    @Qualifier("userDao") --- 按名称进行注入.
    (上述两种方式第一种只要你注入的对象的名字和你属性的名字是一致的就可以不用Quealifier的注解了,注意这里面的名字一直是属性和注入对象中setXXX的set之后的名字一直)这句话是个思路,说的不正确。
    意思是属性如果是对象那么如果不用Qualifier,那么你的属性名应该和对象的bean的id或者name是一样的,如果不一样那么需要加上Qualifier。
  • @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
    等价于
    @Resource(name="userDao")
    private UserDao userDao;
@Component("helloService")
public class HelloService {
    @Value(value = "123")
    private String info;
//    @Autowired(required = true)
//    @Qualifier("userDao")
    @Resource(name = "userDao")
    private UserDao u12serDao;
    public HelloService() {
        System.out.println("start");
    }

    public void sayHello () {
        System.out.println("hello" + u12serDao.getName());
    }
}

3 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
    只需要在类上加该标签,默认是单例方式

测试方式同样是采用老办法

public class HelloServiceTest {
    @Test
    public void demo1 () {
        ClassPathXmlApplicationContext classPathXmlApplicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloService helloService = (HelloService) classPathXmlApplicationContext.getBean("helloService");
        helloService.sayHello();

        classPathXmlApplicationContext.close();
    }

}

4 Spring3.0提供使用Java类定义Bean信息的方法

这种方式是通过java编程方式来配置,比如设置bean和属性,但是该方法一般不用。

@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;
}
}

5 实际开发中使用XML还是注解?

XML:

  • bean管理

注解;

  • 注入属性的时候比较方便.

两种方式结合;一般使用XML注册Bean,使用注解进行属性的注入.

因为如果修改代码的话只需要在配置文件中更改使用的bean就可以了,而属性的注入一般来说是在程序中要指定好的

<context:annotation-config/>
s
@Autowired
@Qualifier("orderDao")
private OrderDao orderDao;