zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    OpenGL编程 基础篇(七)对象的变换——用实心体绘制3D场景
    mysql在查询结果列表前添加一列递增的序号列(最简)
    将中文字符串分割为数组 解决str_split中文乱码php
    file_get_contents 抓取网页乱码。
    js下的sleep实现
    js获取当前时间(昨天、今天、明天)
    JPA为字段设置默认值
    js实现点击按钮弹出上传文件的窗口
    Bootstrap使用模态框modal实现表单提交弹出框
    springboot使用Freemarker继承
  • 原文地址:https://www.cnblogs.com/TaogenJia/p/5468632.html
Copyright © 2011-2022 走看看