zoukankan      html  css  js  c++  java
  • [转]spring学习笔记7.自动装配(补充)

    一、       自动装配autowire

    含义:在bean注入时不需要我们来指定注入哪个具体的bean,而spring容器会根据我的使用autowire属性来确定自动装配功能。

    autowire值:

    1、  autodetect;

    2、  byName:根据bean中成员属性的名称来自动装配

    3、  byType:根据bean中成员属性的类型来自动装配。

    4、  constaractor

    5、  default:会根据<beans>标签中的default-autowire属性来进行自动装配的方式

    6、  no(默认就是这个,需要手动指定注入那个bean)

    (一)   byName

    根据bean中成员属性的名称来自动装配。

    bean代码:

    UserDaoImpl

    public class UserDaoImpl implements UserDao {

        private int daoId;

        public int getDaoId() {return daoId;}

        public void setDaoId(int daoId) {this.daoId = daoId; }

        @Override

        public String toString(){

           return "daoId=" + this.daoId;

        }}

     

    UserService

    public class UserService { 

        private UserDao userDao = new UserDaoImpl();

        public UserDao getUserDao() {

           return userDao;

        }

        public void setUserDao(UserDao userDao) {

           this.userDao = userDao;

        }

        public void add(User u){

           userDao.save(u);

        }}

     

    spring的配置文件

      <bean id="userDao" class="com.wjt276.dao.impl.UserDaoImpl" >

        <property name="daoId" value="1"></property>

      </bean> 

      <bean id="userDao2" class="com.wjt276.dao.impl.UserDaoImpl" >

        <property name="daoId" value="2"></property>

      </bean> 

      <bean name="userService" class="com.wjt276.service.UserService" scope="prototype" autowire="byName">

      </bean> 

     

    测试代码:

        public void testAdd_4() throws Exception {

           ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml");

           UserService service = (UserService)factory.getBean("userService");

           System.out.println(service.getUserDao());

        }

    结果:daoId=1

     

    说明:因为在配置文件中配置了两个UserDaoImpl(名称分别:userDaouserDao2)和一个UserService类。而在userServicebean中并没有进行注入配置。而是使用了autowire属性指定了byName值,这样结果是正确的,是因为spring看到autowire=byName后,会在配置文件中查找beaniduserService成员属性名称一至,然后将其注入,这样就完成了根据名称自动装配功能。

     

    (二)   byType

    根据类型自动装配:就是spring在初始化时,会在配置文件中查找<bean>的类型与userService成员属性的类型相比较,类型一致的将其注入,这样就完成了根据类型自动装配。

     

    (三)   注意

    1、  自动装配使用并不多;

    2、  只有在使用anntation注解时会使用的。

    3、  byType如果出现相同类型在两个以上,就会出现异常。

  • 相关阅读:
    oracle 中和mysql的group_concat有同样作用的写法
    sql find_in_set在oracle下的解决方案
    Django项目部署:使用uwsgi和nginx的方式
    virtualenvwrapper.sh报错: There was a problem running the initialization hooks.解决
    html中footer如何一直保持在页底
    mysqldump导出备份数据库报Table ‘performance_schema.session_variables‘ doesn‘t exist
    django-ckeditor添加代码功能(codesnippet)
    Django_外键查询和反查询
    python面向对象编程(OOP)
    Django模型中字段属性choice的使用
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562370.html
Copyright © 2011-2022 走看看