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,可以按照类型或者名称进行

    注入。

  • 相关阅读:
    Linux Core Dump
    ODP.NET Managed正式推出
    获取EditText的光标位置
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6052724.html
Copyright © 2011-2022 走看看