程序设计的目标高内聚,低耦合。
底层原理:xml解析, 工厂模式(ioc容器就是对象工厂),反射(通过字节码创建对象和获取对象的属性/方法)
说明:
1、 IOC 思想基于 IOC 容器完成, IOC 容器底层就是对象工厂
2、 Spring 提供 IOC 容器实现两种方式:(两个接口)
(1) BeanFactory: IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
* 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2) ApplicationContext: BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
员进行使用
* 加载配置文件时候就会把在配置文件对象进行创建
3、 ApplicationContext 接口有实现类
FileSystemXmlApplicationContext: 填文件路径
ClassPathXmlApplicationContext: 填类路径
1、基于 xml 方式创建对象
(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
(2)在 bean 标签有很多属性,介绍常用的属性
* id 属性:唯一标识
* class 属性:类全路径(包类路径)
* name 属性: 和 id 一样,可以加特殊字符
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
2、基于 xml 方式注入属性(手动装配)
(两种方式:使用 set 方法进行注入;使用有参数构造进行注入)
DI:依赖注入,就是注入属性
2.1、 第一种注入方式:使用 set 方法进行注入
(1)创建类,定义属性和对应的 set 方法
(2)在 spring 配置文件配置对象创建,配置属性注入
* name:属性名
* value:属性值
* ref: bean引用,bean标签的id。可用于内部和外部bean注入,集合中设置对象元素
内部bean注入:
array注入:
map注入:
set注入:
2.2、 第二种注入方式:使用有参数构造进行注入
(1)创建类,定义属性,创建属性对应有参数构造方法
(2)在 spring 配置文件中进行配置
* constructor-arg:有参构造
3、自动装配:一般使用注解方式,这里了解一下xml方式自动装配
bean 标签属性 autowire,配置自动装配 autowire 属性常用两个值: byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样,同一个类型的bean对象可以有多个 byType 根据属性类型注入,同一个类型的bean对象只能有一个 |
1、注解简介:可以作用于类,属性,方法上; 用于简化xml配置
2、Spring创建对象注解
(1) @Component (2) @Service (3) @Controller (4) @Repository |
3、基于注解方式实现对象创建过程
3.1、引入aop依赖
3.2、开启组件扫描
- <context:component-scan base-package="com.atguigu">context:component-scan>
3.3、创建类,在类上面添加创建对象注解
- @Component(value = "userService") //
- public class UserService {
- public void add() {
- System.out.println("service add.......");
- }
- }
4、基于注解方式实现属性注入
对象类型:
(1) @Autowired:根据属性类型进行自动装配
(2) @Qualifier:根据名称进行注入
@Qualifier(value = "userDaoImpl1") //根据名称进行注入
(3) @Resource:可以根据类型注入,可以根据名称注入
- @Resource //根据类型进行注入
- @Resource(name = "userDaoImpl1") //根据名称进行注入
普通类型:
(4) @Value:注入普通类型属性
@Value(value = "abc")
5、完全注解开发(Springboot)
(1)创建配置类,替代 xml 配置文件
- @Configuration //作为配置类,替代 xml 配置文件
- @ComponentScan(basePackages = {"com.atguigu"})
- public class SpringConfig {
- }
(2)编写测试类
- @Test
- public void testService2() {
- //加载配置类
- ApplicationContext context
- = new AnnotationConfigApplicationContext(SpringConfig.class);
- UserService userService = context.getBean("userService",
- UserService.class);
- System.out.println(userService);
- userService.add();
- }