zoukankan      html  css  js  c++  java
  • Spring学习总结三——SpringIOC容器三

    一:spring容器自动装配注入

    为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在

    bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX(),实现自动装配注入。

    autowire的装配方式分为以下几种:

    示例如下:

    1:创建UserService类

     1 /**
     2  * 
     3  */
     4 package com.hlcui.service;
     5 
     6 import com.hlcui.dao.impl.OracleUserDAO;
     7 import com.hlcui.dto.User;
     8 
     9 /**
    10  * @author Administrator
    11  * 
    12  */
    13 public class UserService {
    14 
    15     private OracleUserDAO dao;
    16 
    17     public User login(String username, String pwd) {
    18         try {
    19             User user = dao.findByName(username);
    20             if (pwd != null && pwd.equals(user.getPwd())) {
    21                 return user;
    22             }
    23         } catch (Exception e) {
    24             e.printStackTrace();
    25         }
    26         return null;
    27 
    28     }
    29 
    30     public OracleUserDAO getDao() {
    31         return dao;
    32     }
    33 
    34     public void setDao(OracleUserDAO dao) {
    35         this.dao = dao;
    36     }
    37 
    38 }

    2:在applicationContext.xml配置文件配置bean

    第一种情况:

    通过类型注入byType,那么在UserService类中查找setXXX(A a)方法,然后在spring容器中找A类型对象注入

    1 <!-- 配置userService对象 -->
    2     <bean id="userService" class="com.hlcui.service.UserService"
    3         autowire="byType"></bean>

    编写测试方法并运行:

    1 @Test
    2     /**测试spring自动装配注入*/
    3     public void testAutoWire() {
    4         ApplicationContext ac = getApplicationContext();
    5         UserService us = ac.getBean("userService", UserService.class);
    6         User user = us.login("Tom", "123");
    7         System.out.println(user);
    8     }

    通过结果可以看出登录成功,说明OracleUserDAO对象成功的通过类型装配注入到了UserService对象中。

    第二种情况:

    默认情况下就是autowire="no",的情况,就是禁止自动装配,将autowire属性删除

    1 <!-- 配置userService对象 -->
    2     <bean id="userService" class="com.hlcui.service.UserService"></bean>

    运行测试方法:

    报空指针异常,而且是在login()方法中,dao调用findByName(),所以说明dao这个对象没有注入进来。

    第三种情况:

    通过byName名称注入,UserService类中setXXX(A a)方法,在spring容器配置文件找与匹配的bean名称,然后将对象注入。

    修改配置文件:

    <!-- 配置userService对象 -->
        <bean id="userService" class="com.hlcui.service.UserService"
        autowire="byName"></bean>

    因为UserDao对象bean的id为userDao

    <!-- 配置userDao对象 -->
        <bean id="userDao" class="com.hlcui.dao.impl.OracleUserDAO">
            <constructor-arg index="0" ref="jdbcDatasource" />
        </bean>

    所以UserSerivce类中的属性名字也应该修改为userDao

    修改后如下:

     1 /**
     2  * 
     3  */
     4 package com.hlcui.service;
     5 
     6 import com.hlcui.dao.impl.OracleUserDAO;
     7 import com.hlcui.dto.User;
     8 
     9 /**
    10  * @author Administrator
    11  * 
    12  */
    13 public class UserService {
    14 
    15     private OracleUserDAO userDao;
    16 
    17     public User login(String username, String pwd) {
    18         try {
    19             User user = userDao.findByName(username);
    20             if (pwd != null && pwd.equals(user.getPwd())) {
    21                 return user;
    22             }
    23         } catch (Exception e) {
    24             e.printStackTrace();
    25         }
    26         return null;
    27         
    28     }
    29 
    30     public OracleUserDAO getUserDao() {
    31         return userDao;
    32     }
    33 
    34     public void setUserDao(OracleUserDAO userDao) {
    35         this.userDao = userDao;
    36     }
    37 
    38     
    39 }

    运行测试方法:

    说明UserDao对象成功注入!

    二:对spring容器以及三种注入方式做个小结

    1:注入方式

    setter注入方式:对应的类中必须有setXXX(A a)方法,然后在配置文件bean元素添加property的子元素。

    构造器注入:对应的类中必须有有参数构造方法,然后在配置文件bean元素中添加constructor-arg元素,如果有多个

    参数,可以写多个并列子元素。

    自动装配注入:类中必须有setXXX(A a)方法,然后配置文件bean元素添加属性autowire,可以按照类型或者名称进行

    注入。

  • 相关阅读:
    如何在word中添加视频
    在vc中使用MapX时,如何在视图类中响应鼠标消息
    在vc6中检查一个目录是否存在,如果不存在就创建该目录
    Google推出中文图书搜索简体中文试用版(zz)
    用敏捷软件方法开发界面(zz)
    选择文件对话框的封装
    在vc6中如何使某个状态栏的按钮使能和失效
    MapX对图层的引用和创建实例
    有尊严的生命(zz)
    三十岁的男人(zz)
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6052724.html
Copyright © 2011-2022 走看看