重要特点
- 简化开发
- Ioc
- Aop
- 事务处理
配置
1.在pom文件导入spring坐标
2.新建一个spring的xml配置文件,配置
- bean标签配置bean
- id属性表示给bean起名字
- class属性表示给bean定义类型
<bean id = "XXX" class = "类地址"/>
3.在项目运行文件获取IoC容器
ApplicationContex ctx = new ClassPathXmlApplicationContext("XML文件名.xml");
4.获取bean
XXX xxx = (xxx)ctx.getBean("bean的id"); //获取对象
xxx.方法(); //调用方法
5.设置set方法(setter注入),spring通过set注入控制成员变量(以后实际中使用注解)
6.配置bean之间的绑定
bean
项目中可复用的重要对象。
实例化的三种方式
1.构造方法(常用)
在类中提供可访问的空参构造方法,private也可以。但是一定得有无参构造器,或默认的无参构造器。无参方法不存在则抛出异常BeanCreatException
2.通过静态工厂实例化bean
3.创建实例工厂对象,通过实例工厂对象实例化bean
控制bean的生命周期(不需要动手写)
在bean的配置标签上加上init-method="初始化方法名" destroy-method = "销毁方法名"
注册关闭钩子,容器启动后,在虚拟机关闭之前自动关闭容器
容器名.registerShutdownHook();
接口控制
注入依赖
setter注入
简单类型
在bean中定义引用类型属性,并提供一个set方法,在
引用类型
提供一个set方法,在
构造器注入
简单类型
在bean中定义引用类型属性并提供可访问的构造方法,配置中使用constructor标签value属性注入对象。
引用类型
在bean中定义引用类型属性并提供可访问的构造方法,配置中使用constructor标签ref属性注入引用类型对象。
依赖自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程为自动装配
自动装配方式
按类型(常用)
在bean配置标签后面加上autowire = "byType" (要求容器中相同类型的bean唯一,推荐使用)
按名称(要求容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用)
按构造方法(少用)
自动装配用于引用类型依赖注入,不能对简单类型进行操作
自动装配优先级低于setter注入和构造器注入,同时出现时自动装配失效
创建容器
类路径加载配置文件
ApplicationContext ctx = new ClassPathXml;ApplicationContext("applicationContext.xml");
文件路径加载配置文件
ApplicationContext ctx = new ClassPathXml;ApplicationContext("D:\applicationContext.xml");
加载多个配置文件
ApplicationContext ctx = new ClassPathXml;ApplicationContext("bean1.xml", "bean2.xml");
获取bean
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
BookDao bookDao = ctx.getBean("bookDao", BookDao.class); //推荐
BookDao bookDao = ctx.getBean(BookDao.class);
纯注解方式
使用java类代替配置文件
在config类中使用注解
@Configuration
@ComponentScan("bean路径包名")
在运行程序中加载配置类
Applicationcontext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
@Autowired
自动装配注解(按类型)
基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法。
建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法。
@Qualifier 和@Autowired搭配使用,指定装配bean。
@PropertySource({""})添加外部properties配置文件(路径仅支持单一文件配,多文件请使用数组格式配置,不允许使用通配符*)
注入第三方bean
新建配置类,使用@bean管理
简单类型
用@value注入成员变量
引用类型只需为bean定义方法设置形参即可,容器会根据类型自动装配对象