spring框架IOC实现知识点总结

1. 依赖注入的3种方式

1.1. Set方法注入

public class Address {

private String city;

private String street;

//属性必须有对应的set方法

public void setCity(String city) {

this.city = city;

}

public void setStreet(String street) {

this.street = street;

}

 

 

}

<bean id="addr1" class="com.entity.Address">

<!-- name 属性名 value 属性值 -->

<property name="city" value="上海"></property>

<property name="street" value="浦东"></property>

</bean>

1.2. 构造方法注入

public User(String uname, Address address) {

super();

this.uname = uname;

this.address = address;

}

<!-- 使用构造方法配置bean -->

<bean id="addr" class="com.entity.Address">

<property name="city" value="上海" />

<property name="street" value="商城路" />

</bean>

<bean id="u2" class="com.entity.User" >

<!-- index 构造方法的参数索引号,从0开始 -->

<constructor-arg index="1" ref="addr" ></constructor-arg>

<constructor-arg index="0" value="张学友"></constructor-arg>

 

</bean>

1.3. 静态工厂注入

AddressFactory类中的代码

public static Address createAddress(){

return new Address("上海","黄埔");

}

 

 

<!-- 静态工厂注入bean

factory-method 创建对象的静态方法

-->

<bean id="f" class="com.entity.AddressFactory" factory-method="createAddress" ></bean>

<bean id="u3" class="com.entity.User"  >

<property name="uname" value="郭富城"></property>

<!--  引用之前配置的静态工厂对象的id,实现创建User类下的Address对象 -->

<property name="address" ref="f"></property>

</bean>

2. ApplicationContext事件

2.1. ApplicationContext事件机制是观察者设计模式的实现

2.2.  通过ApplicationEvent类和ApplicationListener接口实现

2.3.  ApplicationEvent:容器事件,定义被监听的事件内容

2.4.  ApplicationListener:监听器,指定负责监听的对象

3. Spring注入各种类型的对象

User类中的代码

private String[] names;

 

private Address[] addrs;

 

private List<Address> addrList;

 

private Map<Integer,Address> addrMap;

private Set<Address> addrSet;

 

配置文件

<bean id="addr1" class="com.entity.Address">

<property name="city" value="上海"></property>

<property name="street" value="浦东"></property>

</bean>

<bean id="u4" class="com.entity.User">

<!-- 数组 -->

<property name="names">

<list>

<value>jack1</value>

<value>jack2</value>

<value>jack3</value>

</list>

</property>

<!-- 对象数组 -->

<property name="addrs">

<list>

<ref bean="addr1" />

<ref bean="addr2" />

</list>

</property>

 

<!-- 对象集合 -->

<property name="addrList">

<list>

<ref bean="addr2" />

<ref bean="addr3" />

</list>

</property>

 

<!-- map集合 -->

<property name="addrMap">

<map>

<entry key="1" value-ref="addr1" ></entry>

<entry key="3" value-ref="addr3" ></entry>

</map>

</property>

<!-- set集合 -->

<property name="addrSet">

<set>

<ref bean="addr1" />

<ref bean="addr2" />

</set>

</property>

 

</bean>

4. 自动装配

4.1. Autowired:配置文件bean节点的属性,自动注入当前bean所依赖的对象属性

public class User{

Private Address addr;

}

<bean id=”user” class=”com.entity.User” autowire=”byName” ></bean>

4.2. Autowired属性有4个属性值

4.3. byName:如果当前bean对象所依赖的属性对象在配置文件中已经配置,且id的名称与bean对象的子对象的属性名相同,则spring自动装配

public class User{

Private Address addr;//与spring配置文件中注入的Address类的id一致

}

<bean id=”addr” class=”com.entity.Address” ></bean>

<bean id=”user” class=”com.entity.User” autowire=”byName” ></bean>

 

4.4. byType:如果当前bean对象所依赖的属性对象在配置文件中已经配置,且类型与bean对象所依赖的子对象的类型一致,则spring自动装配

public class User{

//与spring配置文件中注入的Address类的id可以不一致,

//因为spring配置byType后,根据类型查找可以注入的子对象

Private Address abcd;

}

<bean id=”addr” class=”com.entity.Address” ></bean>

<bean id=”user” class=”com.entity.User” autowire=”byType” ></bean>

如果配置文件中存在2个或2个以上的同类型的bean,则spring报错

5. 使用spring配置文件方式整合项目

5.1. Jar包

 

5.2. 数据库访问层

5.2.1. 接口与接口的实现类与JavaEE项目相同

5.2.2. 数据库帮助类的配置方式

5.2.2.1. 由于实际开发中,经常切换数据库,则使用读取资源文件的方式加载登录数据库的用户名,密码和驱动类

5.2.2.2. 创建资源包resources文件夹,存放所有的配置文件(spring-common.xml,jdbc.properties)

5.3. 服务层:调用数据库访问层代码,实现业务功能

5.4. Spring配置

5.4.1. 配置bean,注入数据库访问层对象,UserDaoImpl类

5.4.2. 配置bean,注入服务层对象,UserService类

5.4.3. 使用自动装配,让spring为UserService对象自动注入所依赖的UserDaoImpl

5.5. 编写测试类

5.5.1. 创建ApplicationContext对象,获取服务层的对象,调用添加方法

6. 使用注解方式自动装配

6.1. 在UserDaoImpl类中配置@Repository("userDao"),相当于配置文件中注入了UserDaoImpl对象,且id=”userDao”

6.2. 在UserService类中配置@Service("userService"),相当于配置文件中注入了UserServic对象,且id=”userService”

6.3. Spring配置文件中注入的所有bean都可以省略,

6.4. 添加context节点,让所有写有spring注解的类生效:

<context:component-scan base-package="com.a,com.b"></context:component-scan>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值