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

注入。

时间: 2024-10-01 10:18:03

Spring学习总结三——SpringIOC容器三的相关文章

Spring学习总结一——SpringIOC容器

什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spring容器对象 1:导入spring相关支持jar包 2:创建spring容器的配置文件applicationContext.xml,名称可以自己定义 内容如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <

Spring学习总结二——SpringIOC容器二

一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Examplebean1类: 1 /** 2 * 3 */ 4 package com.hlcui.dao; 5 6 /** 7 * @author Administrator 8 * 9 */ 10 public class ExampleBean1 { 11 public ExampleBean1() { 1

Spring学习总结四——SpringIOC容器四

一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: 1 /** 2 * 3 */ 4 package com.hlcui.dao; 5 6 /** 7 * @author Administrator 8 * 9 */ 10 public class MessageBean { 11 private String name; 12 13 private int age; 14 15 private double salary; 16 17 pub

Spring学习总结五——SpringIOC容器五

一:spring组件扫描 可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置 文件中配置<context:component-scan base-package="com.hlcui.*"/> 但是不是只有扫描,所在包以及子包下的类都会被扫描进去,而是只有类上面标记注解的才会被扫描进spring容器 常见注解:@Component  通用注解,  一般情况下不确定属于那一层时使用,它仅仅是将类对象扫描到spring容器

Spring学习记录1——IoC容器

IoC容器 1.1  IoC概述 Ioc(Inverse of Control,控制反转)是Spring容器的内核.对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由Bean配置来进行控制.也被称作DI(Dependency Injection,依赖注入),即让调用类对某一接口的实现类的依赖关系由第三方(容器或协调类)注入,可以移除类之间的依赖关系. 1.2 IoC的类型 从注入方法上看,IoC主要划分为3种类型:构造函数注入.属性注入和接口

Spring学习笔记(三)

Spring学习笔记(三) AOP 一.使用Annotation方式实现AOP.步骤: xml里加入配置:<aop:aspectj-autoproxy /> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org

Spring框架参考手册翻译——第三部分 核心技术 6.1 Spring IoC容器和bean的介绍

第三部分 核心技术 这部分参考文档涵盖的这些技术是Spring Framework绝对重要的. 其中最重要的要数Spring框架的控制反转(IoC)容器.深入剖析Spring框架IoC容器之后,紧接着要介绍的是Spring面向切面编程(AOP)技术.Spring框架拥有自己的AOP框架,从概念上很容易理解,并且成功地解决了AOP在Java企业级编程中80%的痛点需求. 还提供了Spring与AspectJ(目前在功能上最丰富,在Java企业领域最成熟的AOP实现)的集成. 第六章,IoC容器 第

Spring学习系列之——第三章:Spring中Bean的配置(一)

Spring的配置形式有两种:基于XML配置和基于注解配置. Bean的配置方式有以下几种: 通过全类名,即通过反射的方式: 通过工厂方法,有静态工厂方法和实例工厂方法: 通过FactoryBean配置: 通过XML文件配置bean 本篇文章将按照下面的目录来说明基于XML的方式配置bean JavaBean的创建 通过XML配置的方式来配置bean XMLbean的配置: spring的依赖注入的方式 属性注入 构造器注入 工厂方法注入(很少使用) 测试方法 IoC容器的实例化: Applic

2020年最全Spring面试题总结,“金三银四”戴上口罩不畏惧!

附上spring核心价值导图 ?1. 什么是 spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用, 但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企 业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯. 2. 使用 Spring框架的好处是什么 ? 轻量:Spring 是轻量的,基本的版本大约2MB 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是 创建或查找依赖