`

第三章 set注入

阅读更多
Setter注入
Dao层:
Dao层接口:
public interface FruitDao {
public void create();
}
实现类:
public class FruitDaoImpl implements FruitDao {
public void create(){
System.out.println("Dao层方法create被调用");
}
}

服务层接口:
public interface FruitService {
public void create();
}

服务层实现类:
public class FruitServiceImpl implements FruitService {
private FruitDao fruitDao;

@Override
public void create() {
fruitDao.create();
}

public void setFruitDao(FruitDao fruitDao) {
this.fruitDao = fruitDao;
}
}

Test方法:
public class Test {

public static void main(String[] args) {
ApplicationContext acx = new ClassPathXmlApplicationContext(
"chapter2.xml");
FruitService fruitService =(FruitService)acx.getBean("fruitService");
fruitService.create();
}
}

XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="fruitDao" class="dao.impl.FruitDaoImpl"/>
<bean id="fruitService" class="service.impl.FruitServiceImpl">
<property name="fruitDao" ref="fruitDao" />
</bean>
</beans>
需要注意的地方:
<property name="fruitDao" ref="fruitDao" />
这里的name="fruitDao"并不是私有属性的名字,实际上Spring会根据这个名字找对应的setFruitDao这个方法来达到注入的一个目的. fruitDao是set方法的简单名称

使用set注入基本与复杂类型:
MyClass:
public class MyClass {
private String id;
private String name;
private Set<Student> students = new HashSet<Student>();

public MyClass() {
super();
}

public MyClass(String name) {
super();
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Set<Student> getStudents() {
return students;
}

public void setStudents(Set<Student> students) {
this.students = students;
}
}

Student:
public class Student {
private String id;
private String name;
private Integer age;
private MyClass myClass;

public Student() {
super();
}

public Student(String name) {
super();
this.name = name;
}

public Student(String name, MyClass myClass) {
super();
this.name = name;
this.myClass = myClass;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public MyClass getMyClass() {
return myClass;
}

public void setMyClass(MyClass myClass) {
this.myClass = myClass;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}
配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="myclass" class="model.MyClass">
<property name="id" value="class001" />
<property name="name" value="java0801" />
</bean>
<bean id="student" class="model.Student">
<property name="id" value="001" />
<property name="name" value="wdpc" />
<property name="age" value="22" />
<property name="myClass" ref="myclass" />
</bean>
</beans>
Test:
public class Test {
public static void main(String[] args) {
ApplicationContext acx = new ClassPathXmlApplicationContext(
"chapter2.xml");
Student student = (Student) acx.getBean("student");
System.out.println(student.getAge() + ":"
+ student.getMyClass().getName());
}
}

记住,使用set注入,一定要给类提供一个无参的构造函数,否则Spring不能实例化类的.
value是配置基本类型值
ref是配置复杂类型值.

set注入也是日后使用最多的一种注入方式.
分享到:
评论

相关推荐

    SpringSet方法注入

    我们学习了spring框架spring框架里面有3个优势第一个是轻量级的IOC也叫控制反转后来改名为DI也叫依赖注入,依赖注入里面有3中注入方法分别是set注入,构造器注入,注解注入,我传的是set注入的视频

    DLL动态库注入器.rar

    1.首先第一点就是可以注入到64位进程内,并且注入方式多种多样,我想这一点就足以让你心动 2.总所周知,在WINdows系统内,不同位数不可以互相注入,也就是说32位的DLL只能注入到32位进程,64同理 3.为了方便...

    spring(一)–概念和历史/hellospring/IOC创建对象的方式/Spring配置/set注入/c命名和p命名空间注入/bean的作用域

    文章目录一、概念和历史二、hellospring三、IOC创建对象的方式四、Spring配置五、set注入–属性注入六、c命名和p命名空间注入七 、bean的作用域 一、概念和历史 Spring的形成,最初来自Rod Jahnson所著的一本很有...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第3章前人栽树后人乘凉 ——、JSP内置对象 3.1 本章学习任务 3.1.1 本章知识体系 3.1.2 实例开发任务 3.2 简化开发JSP内置对象概述 3.2.1 为什么需要JSP内置对象 3.2.2 内置对象及其使用场合 3.3 out输出对象的应用 ...

    spring in action英文版

     第3章 创建切面  3.1 AOP介绍  3.1.1 定义AOP术语  3.1.2 Spring的AOP实现  3.2 创建通知  3.2.1 前置通知  3.2.2 后置通知  3.2.3 环绕通知  3.2.4 异常通知  3.2.5 引入通知  3.3...

    Hibernate实战(第2版 中文高清版)

     第3章 领域模型和元数据   3.1 CaveatEmptor应用程序   3.1.1 分析业务领域   3.1.2 CaveatEmptor领域模型   3.2 实现领域模型   3.2.1 处理关注点渗漏   3.2.2 透明和自动持久化   3.2.3 编写POJO...

    深入浅出Struts2(附源码)

    第3章动作与结果 32 3.1 动作类 32 3.2 如何访问资源 34 3.2.1 ServletActionContext对象 34 3.2.2 Aware接口 35 3.2.3 通过Aware接口访问资源 38 3.3 把静态参数传递给一个动作 41 3.4 ActionSupport类 41 ...

    Struts2 in action中文版

    第3章 使用Struts 2动作 36 3.1 Struts 2动作简介 36 3.2 打包动作 39 3.2.1 Struts 2公文包示例应用程序 39 3.2.2 组织你的包 39 3.2.3 使用struts-default包中的组件 41 3.3 实现动作 43 3.3.1 可选的Action接口 ...

    spring框架技术+第2天+xmind思维导图

    依赖注入三种方式【手动装配-非注解方式】;构造函数注入 index:可省略,参数下标,默认从0开始 name :可省略,构造函数参数列表中的参数名称 public UserService(IUserDao dao) { this.dao = dao; } ...

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段37讲 Phaser工具的实战案例使用第三部分_.mp4  高并发编程第三阶段38讲 Executor&amp;ExecutorService讲解_.mp4  高并发编程第三阶段39讲 ThreadPoolExecutor七大构造参数详细讲解_.mp4  高...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段37讲 Phaser工具的实战案例使用第三部分_.mp4  高并发编程第三阶段38讲 Executor&amp;ExecutorService讲解_.mp4  高并发编程第三阶段39讲 ThreadPoolExecutor七大构造参数详细讲解_.mp4  高...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    第3章 动作与结果 32 3.1 动作类 32 3.2 如何访问资源 34 3.2.1 ServletActionContext对象 34 3.2.2 Aware接口 35 3.2.3 通过Aware接口访问资源 38 3.3 把静态参数传递给一个动作 41 3.4 ActionSupport类 41 3.5 ...

    java命名规范 开发规范

    d. 开发Service接口和Service接口实现,并在Action中通过set方法注入该Service; 接口文件:UserService 接口实现:UserServiceImpl 注入Service e. 开发DAO,DAO继承com.hikvision.xxx.HibernateBaseDAO; 示例 f...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    sqlserver2000基础(高手也有用)

    第 3 章 字符处理 55 3.1 字符类型概述 55 3.2 字符串分拆 56 3.2.1 循环截取法 57 3.2.2 动态Transact-SQL语句法 57 3.2.3 辅助表法 59 3.2.4 分拆数据到列 61 3.2.5 分拆数字数据 62 3.2.6 分拆...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第3章 对xml文档进行分析 46 3.1 dom、sax和jaxp 46 3.2 使用dom解析xml文档 47 3.2.1 dom结构模型 47 3.2.2 dom解析器工厂 50 3.2.3 jaxp的错误类和异常类 52 3.2.4 用dom解析xml文档实例 53 3.3 使用sax...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第3章 对xml文档进行分析 46 3.1 dom、sax和jaxp 46 3.2 使用dom解析xml文档 47 3.2.1 dom结构模型 47 3.2.2 dom解析器工厂 50 3.2.3 jaxp的错误类和异常类 52 3.2.4 用dom解析xml文档实例 53 3.3 使用sax...

Global site tag (gtag.js) - Google Analytics