构造注入

语法:

<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. java正则API简单解析

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  2. Domion OA 日记

    我现在使用的是IBM的 Lotus Dimion 8.5 以下内容是个人的浅显了解,在此记录下,已作为后续记录的翻看 第一次接触文档型数据库,确实颠覆了我对数据模型的认知,我之前一直用sql的 文档型 ...

  3. XAF实现运行时填加验证规则并保存到数据库中

    有几种方法可以用来声明一个验证规则.最常用的方法是使用对应的Attribute来定义.详见这里.验证模块还允许您通过在业务类实现 IRuleSource 接口定义自定义的验证规则的来源. IRuleS ...

  4. git学习笔记11-git多人协作-实际多人怎么开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  5. jsp get方式请求参数中包含中文乱码问题解决

    1. 自己接收到参数之后在后台进行转码处理 2: 修改tomcat的配置文件  server.xml <Connector port="8080" protocol=&quo ...

  6. iOS - Swift NSNull 空值

    前言 public class NSNull : NSObject, NSCopying, NSSecureCoding 作为占据空间的一个空值,如用在数组或字典中占据一个没有任何值的空间. 1.NS ...

  7. web设计经验<七>13步打造优雅的WEB字体

    今天,大多数浏览器已经默认支持Web字体,日趋增多的字体特性被嵌入最新版HTML和CSS标准中,Web字体即将迎来一个趋于复杂的崭新时代.下面是一些基本的关于字体的规则,特别适用于Web字体. 原文地 ...

  8. java中String的常用方法

    java中String的常用方法1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len= ...

  9. Maven核心概念之依赖,聚合与继承

    一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>juni ...

  10. JavaWeb学习总结(十一)--JDBC之批处理

    一.批处理的介绍 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.批处理只针对更新(增.删.改)语句,批 ...