spring_3最小化Spring XML配置

一、最小化xml配置

我们使用<bean>标签定义bean以及使用<constructor-arg>或者<property>装配bean。对于少量的bean的应用来说很好,但是随着应用的发展,我们不得不编写越来越复杂的xml。
然而,spring提供了减少xml的配置的方法。
自动检测(autodiscovery),自动识别哪些类要装配成bean,减少<bean>标签的使用。
自动装配(autowiring),自动装配bean的属性。减少<property><constructor-arg>标签的使用

二、自动装配bean

自动装配的作用:不用为所有属性赋值。
只能为bean的引用类型成员变量自动装配,不能为bean的基本类型成员变量自动装配。

1. 实现自动装配的方式
  • 通过配置xml
  • 通过注解。
2. 自动装配引用类型成员变量的实现策略
  • xml文件方式,是在xml文件中找相同类的不同id的bean的属性装配到该bean的属性中。
  • 注解方式,则在xml文件找到一个引用对象的bean装配到该引用变量属性中。注解方式的方式,在类中不需要为该引用变量提供set方法。
3. 具体实现
  • 通过配置xml自动装配bean
    通过设置autowire属性,其中有4种类型的自动装配策略,byName、byType、constructor、autodetect。
    byName:把与bean的属性具有相同名字的其他bean自动装配到bean的对应属性中。
    例如,
<bean id="car" class="beans.Car"
    p:brand" value="baoma"  p:price" value="12000"/>
<bean id="person" class="beans.Person"
    p:name="zhangsan" p:car-ref="car"/>
//自动装配,不需要为car属性赋值
<bean id="car2" class="beans.Car"
     p:name="lisi"    autowire="byName"/>
  • 通过注解自动装配bean
    在xml文件中声明启用注解装配<context:annotation-config />
    在javabean类中相应属性上添加注解,spring支持的自动装配注解@Autowired、@Inject、@Resource。
    例如,
    1).javabean类添加注解
public class User {
    private String name;
    @Autowired(required=false)
    private Car car;  
    ...相应的set、get方法...
}

2).配置xml文件

//启用注解装配
<context:annotation-config />
//注解自动装配bean的Car属性,在声明bean的时候不需要为Car属性赋值
<bean id="car2" class="beans.Car" 
    p:name="zhangsan" />
4. 可选的自动装配

如果没有匹配的bean,或者存在多个匹配的bean,@Autowired注解会出NoSuchBeanDefinitionException异常
可以通过设置注解的required属性为false配置自动装配是可选的,如果没有匹配的bean会自动为属性设置为null。

三、自动检测Bean

1.基本知识

通过xml配置<context:component-scan>,spring会自动检测添加了自动检测注解的类。还会启动自动装配的。不需要<context:annotation-config>。自动的为该类创建bean。常用的注解:@Component、@Controller、@Repository、@Service

2. 使用场景

自动检测即可以为你自动生成bean,也可以自动装配。适用于service层调用dao层,如:
UserService调用UserDao层的方法时,UserService类有的成员变量UserDao对象。就可以自动检测Userservice类,自动装配userDao对象。不需要在UserService类中new UserDao,只需声明就行。

3. 具体实现

例如,
1).配置xml文件
<context:componet-scan base-package="" />
2).标注要自动检测的类

@Component
public class UserService{
    @Autowired
    UserDao userDao ;
    public void add(){
        userDao.add();
    }
}

自动将UserService类注册为Spring Bean ,Bean的id默认为第一个字母小写的类名即为userService。
也可以显示的自定义bean的id,即@Component("myService")。
自动装配了userDao。

四、使用Spring基于java的配置

通过定义一个配置类来代替xml文件,在java类中配置bean代替在xml中配置bean

1).xml的配置
<context:componet-scan base-package="" />
2).定义一个配置类

@configuration
public class SpringConfig{
    @Bean
    public Car duke(){
        Car car = new Car();
        car.setBrand("baoma");
        car.setPrice(12000);
        return car;
    }
}
posted @ 2016-05-07 16:44  Taogen  阅读(167)  评论(0编辑  收藏  举报