构造注入

语法:

<constructor-arg>

   <ref bean=“bean的id”/>

</constructor-arg>

1.首先创建一个实体类,一定要有带参构造

public class UserEntity {
private Integer id;
private String name;
private String pwd;
private CardEntity myCard; public UserEntity() {
System.out.println("UserEntity初始化============================");
} public UserEntity(Integer id, String name, String pwd, CardEntity myCard) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
this.myCard = myCard;
}
// 省略get,set
}

2.创建dao

public interface UserEntityDao {
public void save(UserEntity user);
}

2.创建dao实现类

public class UserEntityDaoImpl implements UserEntityDao {

    @Override
public void save(UserEntity user) {
} }

3.创建biz

public interface UserEntityBiz {
public void save(UserEntity user); }

4.创建biz实现类,植入一个dao对象

public class UserEntityBizImpl implements UserEntityBiz {
private UserEntityDao userDao; public UserEntityBizImpl() {
} public void UserEntityBizImpl(UserEntityDao userDao) {
this.userDao = userDao;
} @Override
public void save(UserEntity user) {
userDao.save(user);
System.out.println("===保存成功====");
}
//省略get,set
}

5.配置xml

<bean id="card" class="cn.cnsdhzzl.entity.CardEntity">
<property name="id" value="123"></property>
<property name="cardNumber" value="1111111110000"></property>
</bean> <bean id="userDao" class="cn.cnsdhzzl.dao.impl.UserEntityDaoImpl" /> <bean id="userBiz" class="cn.cnsdhzzl.biz.impl.UserEntityBizImpl">
<constructor-arg>
<ref bean="userDao"></ref>
</constructor-arg>
</bean> <bean id="userEntity" class="cn.cnsdhzzl.entity.UserEntity">
<constructor-arg index="0" type="java.lang.Integer"
value="001" />
<constructor-arg index="1" type="java.lang.String"
value="002用户" />
<constructor-arg index="2" type="java.lang.String"
value="003用户密码" />
<constructor-arg index="3" ref="card" />
</bean>

6.测试

@Test
/*
* 构造注入
*/
public void constructorSpring() {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"applicationContext.xml");
UserEntityBizImpl biz = (UserEntityBizImpl) ac.getBean("userBiz");
UserEntity ue = (UserEntity) ac.getBean("userEntity");
biz.save(ue);
System.out.println(ue.toString());
}

p命名空间注入

语法:

p:属性名=“属性值”

p:属性名-ref=“bean的id”

1.准备一个实体类

public class CardEntity {
private Integer id;
private String cardNumber; public CardEntity() {
} public CardEntity(Integer id, String cardNumber) {
this.id = id;
this.cardNumber = cardNumber;
} @Override
public String toString() {
return "CardEntity [id=" + id + ", cardNumber=" + cardNumber + "]";
}
//省略get,set
}

2.配置xml

<!-- 使用p空间实现属性注入 -->
<bean id="card" class="cn.cnsdhzzl.entity.CardEntity" p:id="001"
p:cardNumber="62256549361" />

3.测试

@Test
/*
* P命名空间注入
*/
public void PInjection() {
CardEntity card = (CardEntity) ac.getBean("card");
System.out.println(card.toString());
}

注:如果属性中包括了xml中的特殊字符(&、<、>、"、'),则注入时需要进行处理,通常可以采用两种方法:使用<![CDATA[]]>标记或把字符串替换为实体引用。

xml中预定义的实体引用
符号 实体引用 符号 实体引用
< &lt; ' &apos;
> &gt; " &quot;
& &amp;    

注入集合类型的属性

1.list

<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<list>
<value>计算机</value>
<value>运动</value>
</list>
</property>
</bean>

2.set

<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<set>
<value>计算机</value>
<value>运动</value>
</set>
</property>
</bean>

3.map

<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<map>
<entry>
<value>计算机</value>
</entry>
<entry>
<value>运动</value>
</entry>
</map>
</property>
</bean>

4.props

<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<props>
<prop key="computer">计算机</prop>
<prop key="motion">运动</prop>
</props>
</property>
</bean>

5.注入null和空值

<!-- 注入空字符串 -->
<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<value></value>
</property>
</bean>
<!-- 注入null -->
<bean id="user" class="cn.cnsdhzzl.entity.UserEntity">
<property name="hobbies">
<null></null>
</property>
</bean>

Ioc和Aop扩展--多种方式实现依赖注入(构造注入,p命名空间注入,集合类型注入,注入null和注入空值)的更多相关文章

  1. IOC和AOP使用扩展 多种方式实现依赖注入

    多种方式实现依赖注入 1.Spring 使用setter访问器实现对属性的赋值, 2.Spring 构造constructor方法赋值, 3.接口注入 4.Spring P命名空间注入直接量 sett ...

  2. Spring的Ioc和AOP扩展

    多种方式实现依赖注入: 这里唯一需要说明的是如果要使用P命名空间实现属性注入,需要添加命名空间的声明: 如我的xml里红色字体: <?xml version="1.0" en ...

  3. Spring学习总结(三)——Spring实现AOP的多种方式

    AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术.AOP是OOP的补充,是Spring框架中的一个 ...

  4. Spring实现AOP的多种方式

    转载自:https://www.cnblogs.com/best/p/5736422.html:加了一些自己的注释: AOP(Aspect Oriented Programming)面向切面编程,通过 ...

  5. Spring——多种方式实现依赖注入

    在Spring的XML配置中,只有一种声明bean的方式:使用<bean>元素并指定class属性.Spring会从这里获取必要的信息来创建bean. 但是,在XML中声明DI时,会有多种 ...

  6. IoC和AOP扩展

    一.构造注入 二.使用p命名空间注入属性值 三.注入不同数据类型 <?xml version="1.0" encoding="UTF-8"?> &l ...

  7. Spring多种方式实现依赖注入

    平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...

  8. 多种方式实现依赖注入及使用注解定义bean

    构造注入 如何给构造方法中的参数注入方法呢如下 首先bean代码如下 package cn.pojo; public class Greeting { /** * 说的话 */ private Str ...

  9. IoC和AOP使用扩展。。。

    实现依赖的多种方式. 1.理解构造注入. 2.掌握使用p命名空间实现属性注入. 3.理解不同的数据类型的注入方式. 4.如何通过构造注入为业务类注入所依赖的数据访问层对象,实现保存用户数据功能. 5. ...

随机推荐

  1. python 列表函数

    list函数: 功能:将字符创转化为列表,例: 列表基本函数: 1.元素赋值,例: 注意:通过list[0]= 'hel',如果原来位置上有值,会覆盖掉原来的. 2.分片操作 1)显示序列,例: 注意 ...

  2. apecceosummit2016

    https://www.apecceosummit2016.com/program.html Thursday 17 November 2016 9:00am - 9:00pm REGISTRATIO ...

  3. [转]ubuntu下安装程序的三种方法

    出处:http://www.cnblogs.com/xwdreamer/p/3623454.html 引言 在ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装de ...

  4. Git开源项目工作流程图

  5. 这个算asp.net的一个bug吗?

    asp.net设置按钮Enabled="false"后OnClientClick中添加的验证脚本消失了 下面的确可以 <asp:Button ID="btnRegi ...

  6. C++ 11 右值引用

    C++11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习“移动语义”(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 注意:左值右值翻译可能有些问题 *L ...

  7. Linux mysql常用操作命令

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/46375931 1.linux下启动MySQL的命令:mysqladmin start ...

  8. Android_进化史和平台架构介绍

    一.Android平台发展史  2008年9月,谷歌正式发布了Android 1.0系统,全球第一台Android设备HTC (G1)  2009年4月,谷歌正式推出了Android 1.5      ...

  9. VI查找与替换

    一.vi查找:    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找, 不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出 ...

  10. 转!数据库连接池概念、种类、配置(DBCP\C3P0\JndI与Tomact配置连接池)

    数据库连接池概念.种类.配置(DBCP\C3P0\JndI与Tomact配置连接池) 一.DBCP 连接:DBCP 连接池是 Apache 软件基金组织下的一个开源连接池实现. 需要的 java 包c ...