Write and flow in li|

逐东

园龄:3年3个月粉丝:1关注:0

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管理:

  1. Spring创建对象
  2. Spirng注入属性(创建过程中向成员变量赋值)

基于xml方式创建对象

<bean id ="user" class="com.yi.spring5.User"></bean>

id:唯一标识
class:包类路径

DI:依赖注入

  1. 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>
  1. 带参构造器注入 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>
  1. 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 生命周期)

  1. 通过构造器创建 bean 实例(无参数构造)
  2. 为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
  3. 调用 bean 的初始化的方法(需要进行配置初始化的方法)
  4. bean 可以使用了(对象获取到了)
  5. 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
  6. bean 可以使用了(对象获取到了)
  7. 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

IOC 操作 Bean 管理(自动装配,autowire)

bean标签中可以配置autowire属性,可以配置根据属性名称注入或根据属性类型注入。

IOC 操作 Bean 管理(基于注解方式)

spring可以基于注解的方式管理bean。
比如

  • @Component
  • @Service
  • @Controller
  • @Repository

此四个注解可以用来创建bean实例

使用方式:
引入spring-apo依赖,配置文件中开启注解扫描(扫描包上层目录),在类上面添加创建对象注解,最后开启组件扫描的细节配置。

也有一下这四个注解,设置注入方式

  1. @Autowired //根据名称进行注入
  2. @qualifier //根据名称进行注入
  3. @Resource //可以根据类型注入,可以根据名称注入
  4. @Value //注入普通类型属性

Aop(Aspect Oriented Programming)

面向切面编程,可以对程序中业务逻辑进行隔离,在不修改源代码的情况,向猪肝功能里面添加新功能。

AOP底层原理

Aop底层使用动态代理,有两种情况

  • 第一种:有接口的情况,使用JDK动态代理
  • 第二种:没有接口的情况,使用CGLIB动态代理

AOP术语

  1. 连接点
    1. 类中可以被增强的方法,被称为连接点
  2. 切入点
    1. 实际被增强的方法,成为切入点
  3. 通知(增强)
    1. 实际增强的逻辑部分成为通知
    2. 通知有多种类型
      1. 前置通知
      2. 后置通知
      3. 环绕通知
      4. 异常通知
      5. 最终通知
  4. 切面
    1. 把通知应用到切入点的过程

本文作者:逐东

本文链接:https://www.cnblogs.com/vuds/p/16098711.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   逐东  阅读(36)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起