spring 之 bean的作用及autowiring

1. Bean对象的生命周期: 一个作用域,一个创建流程来分。

2. Bean的作用域:

  Singleton:默认,单例,在一个容器中是唯一的。

  Prototype:原型,也叫多例,每次从容器中获取时,重新创建新的对象。(Action就是prototype);

  Request: 在一个请求范围内有效。

  Session: 在一个会话范围内有效。

  Application:在一个应用范围中均有效,相当于ServletContext。

  Global session:只在porlet中有效。

3. Autowiring 自动装配:

  • Default:不使用自动装配
    <bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/>
        <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="default">
            <property name="userDao" ref="userDao"></property>
        </bean>
  • ByName:根据属性名到容器查找是否在和属性名相同的bean,如果找到那么自动装配
    <bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/>
        <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="byName">
        </bean>
  • ByType:根据属性的类型,到容器中查找相同类型bean对象,如果找到那么直接装配,如果有两个相同类型的对象就会报错
    <bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/>
        <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="byType">
        </bean>
  • Constructor:根据构造方法参数的类型自动注入,指定类型中要有对应的构造器。
    public class UserServiceImpl implements UserService{
        private UserDao userDao;
        
        public UserServiceImpl(UserDao userDao) {
            super();
            this.userDao = userDao;
        }
        @Override
        public void save() {
            userDao.save();
        }
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }

    配置:

    <bean id="userDao" class="cn.wh.dao.impl.UserDaoImpl"/>
        <bean id="userService" class="cn.wh.service.impl.UserServiceImpl" autowire="constructor">
        </bean>

    使用自动装配需要在bean的配置,比较麻烦,可以设置全局的自动装配类型:

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">

  

原文地址:https://www.cnblogs.com/forever2h/p/6744031.html