构造注入

语法:

<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. SQL触发器,数据库

    触发器类型有两种: 1.AFTER(FOR)触发器 在动作执行之后触发(增删改执行完成后,触发器中的代码再执行),不能为视图指定for触发器,只能为表指定该触发器. 2.instead of触发器 可 ...

  2. wooyunAPI

    经常要爬去乌云的信息,但是每次都是硬爬,写完了发现乌云有提供API的,整理给大家: 1. WooYun Api是什么 通过WooYun开放的Api接口,其它网站或应用可以根据自己获取的权限调用WooY ...

  3. 键盘unicode值对照表

    A:65 B:66 C:67 D:68 E:69 F:70 G:71 H:72 I:73 J:74 K:75 L:76 M:77 N:78 O:79 P:80 Q:81 R:82 S:83 T:84 ...

  4. HDU 5835 Danganronpa(弹丸论破)

     Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. C# WinForm程序添加引用后调用静态方法时报“Interfaces_Helper.Global”的类型初始值设定项引发异常。---> System.NullReferenceException: 未将对象引用设置到对象的实例。

    出现原因: 因为Global类初始化某个静态变量时没有成功则会抛 System.NullReferenceException 异常,具体代码: public static string connstr ...

  6. CSS笔记(三)背景

    CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果. 参考:http://www.w3school.com.cn/css/css_background.asp 背景色 p {backg ...

  7. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  8. JAVA入门 第五周 1多项式

    1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...

  9. linux环境变量LD_LIBRARY_PATH

    LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...

  10. 关于php的一些小知识

    浏览目录: 一.PHP的背景和优势: 二.PHP原理简介: 三.PHP运行环境配置: 四.编写简单的PHP代码以及测试. 一.PHP的背景和优势 1.1   什么是PHP? PHP是能让你生成动态网页 ...