XML方式:
IOC:控制反转的底层原理就是:工厂模式+反射+配置文件
DI:依赖注入就是通过配置文件设置属性值
BeanFactory 是老版本的工厂类:调用getBean的时候,才会生成类的实例
ApplicationContext 是新版本的工厂类:加载配置文件的时候,就会将Spring管理的类都实例化
ApplicationContext有两个实现类:
ClassPathXmlApplicationContext :加载类路径下的配置文件
FileSystemXmlApplicationContext :加载文件系统下的配置文件
**
id 使用了约束中的唯一约束,里面不能出现特殊字符
name 没有使用约束中的唯一约束(理论上可以重复,实际开发中不能出现重复),可以出现特殊字符
bean生命周期的配置
init-method:Bean被初始化的时候执行的方法
destroy-method: Bean被销毁的时候的方法(Bean是单例创建,工厂关闭)
Bean作用范围的配置:
scope Bean的作用范围
singleton 默认的,Spring会采用单例模式创建这个对象
prototype 多例模式,用一次new一个(Struts2和spring整合的时候一定会用到)
P名称空间的属性注入
普通属性 p:属性名="值"
对象属性 p:属性名-ref="值"
代码如下
public interface UserService {
public class UserServiceImpl implements UserService {
import java.util.Arrays;
配置文件
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
ApplicationContext2.xml
<?xml version="1.0" encoding="UTF-8"?>
执行
import org.junit.Test;
得到结果
save..name=李东;age=30;price=2000;student=Student{name='学生', arrs=[张三, 李四, 王五], list=[1, 2, 3], set=[a, b, c], map={1=a, 2=b, 3=c}}
注解的方式
Spring包括的模块
web层:springmvc
service层:bean管理,声明式事物
DAO层:ORM模块、jdbc模板
IOC注解方式,可以不提供set方法
属性如果有set方法,注解添加到set方法上,没有set方法就添加到属性上
注解详解
@Component:组件
衍生:@Controller web层的类、@Service service层的类、@Repository DAO层的类(一般用这个)
普通属性:@Value
对象属性:@Autowired 习惯是和@Qualifier一起使用
@Resource(一般用这个)
生命周期相关注解
@PostConsruct 初始化
@PreDestroy 销毁
Bean作用范围
@Scope(singleton/prototype)
代码如下
public interface UserDAO {
public interface UserService {
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
配置文件
<?xml version="1.0" encoding="UTF-8"?>
执行
import org.junit.Test;
输出结果
UserDAOImpl被执行了init
总结:一般XML用来管理Bean,注解完成属性注入
欢迎关注我的微信公众号:安卓圈
本文分享自微信公众号 - 安卓圈(gh_df75572d44e4)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。