Spring5简单记录
作者:互联网
Spring
IOC
配置文件中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置 User 对象创建-->
<bean id="user" class="com.yi.spring5.User"></bean>
</beans>
测试代码中
@Test
public void testAdd() {
//1 加载 spring 配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
//2 获取配置创建的对象
User user = context.getBean("user", User.class);
System.out.println(user);
user.add();
}
什么是IOC
- 控制反转,把对象创建和调用交给Spring管理
- 降耦
IOC底层原理
- xml解析
- 工厂模式
- 反射
第一步 xml配置文件,配置创建的对象(例如User)
第二部 创建工厂类(例如:UserFactory);工厂类中进行xml解析,通过反射创建对象。
IOC接口
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
Spring提供IOC容器实现两种方式
- BeanFactory:IOC容器基本实现。不提供给开发人员使用。加载配置的时候不生成对象,使用对象时候才创建。
- ApplicationContext:BeanFactory的子接口,提供更多强大的功能,给开发人员进行使用的。之前加载xml文件使用的ClassPathXmlApplicationContext类就是ApplicationContext的实现类之一。
IOC操作Bean的管理(注入普通属性)
Bean管理:
- Spring创建对象
- Spirng注入属性(创建过程中向成员变量赋值)
基于xml方式创建对象
<bean id ="user" class="com.yi.spring5.User"></bean>
id:唯一标识
class:包类路径
DI:依赖注入
- set注入:在bean标签中间添加property,需要实体类的set方法
/**
* 演示使用 set 方法进行注入属性
*/
public class Book {
//创建属性
private String bname;
private String bauthor;
//创建属性对应的 set 方法
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
}
<!--2 set 方法注入属性-->
<bean id="book" class="com.yi.spring5.Book">
<!--使用 property 完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<property name="bname" value="易筋经"></property>
<property name="bauthor" value="达摩老祖"></property>
</bean>
- 带参构造器注入 constructor-arg
<bean id="orders" class="com.atguigu.spring5.Orders">
<constructor-arg name="oname" value="电脑"></constructor-arg>
<constructor-arg name="address" value="China"></constructor-arg>
</bean>
- p名称空间注入
略
IOC操作Bean的管理(注入其他类型属性)
IOC可以注入Null,以外部bean的方式为Servic注入Dao
以内部bean方式,为实体类中表示一对多关系的属性注入。比如部门类里注入员工实体类属性。
IOC操作Bean的管理(注入集合属性)
创建实体类,定义数组、list、map、set 类型属性后,生成对应set方法。在Spring配置文件中,bean标签中间,可以使用array,list,map,set方式注入相应集合属性。
IOC 操作 Bean 管理(FactoryBean)
Spring有两种类型的bean,一种是普通bean一种是工厂bean。
普通 bean:在配置文件中定义 bean 类型就是返回类型
工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样
- 第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
- 第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
IOC 操作 Bean 管理(bean 作用域)
bean标签中有socpe属性,默认值singleton,第二个值 prototype,多实例对象。
<bean id="orders" class="com.yi.spring5.Orders" scope="prototype"> </bean>
IOC 操作 Bean 管理(bean 生命周期)
- 通过构造器创建 bean 实例(无参数构造)
- 为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
- 调用 bean 的初始化的方法(需要进行配置初始化的方法)
- bean 可以使用了(对象获取到了)
- 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
- bean 可以使用了(对象获取到了)
- 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
IOC 操作 Bean 管理(自动装配,autowire)
bean标签中可以配置autowire属性,可以配置根据属性名称注入或根据属性类型注入。
IOC 操作 Bean 管理(基于注解方式)
spring可以基于注解的方式管理bean。
比如
- @Component
- @Service
- @Controller
- @Repository
此四个注解可以用来创建bean实例
使用方式:
引入spring-apo依赖,配置文件中开启注解扫描(扫描包上层目录),在类上面添加创建对象注解,最后开启组件扫描的细节配置。
也有一下这四个注解,设置注入方式
- @Autowired //根据名称进行注入
- @qualifier //根据名称进行注入
- @Resource //可以根据类型注入,可以根据名称注入
- @Value //注入普通类型属性
Aop(Aspect Oriented Programming)
面向切面编程,可以对程序中业务逻辑进行隔离,在不修改源代码的情况,向猪肝功能里面添加新功能。
AOP底层原理
Aop底层使用动态代理,有两种情况
- 第一种:有接口的情况,使用JDK动态代理
- 第二种:没有接口的情况,使用CGLIB动态代理
AOP术语
- 连接点
- 类中可以被增强的方法,被称为连接点
- 切入点
- 实际被增强的方法,成为切入点
- 通知(增强)
- 实际增强的逻辑部分成为通知
- 通知有多种类型
- 前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
- 切面
- 把通知应用到切入点的过程
标签:set,属性,记录,Bean,bean,简单,Spring5,IOC,注入 来源: https://www.cnblogs.com/vuds/p/16098711.html