• spring_IOC编程


    环境搭建

    创建项目

    java项目或者web项目都可以

    添加jar包

    添加配置文件

    在项目的src下新增配置文件,文件名随意:applicationContext.xml

    xml文件约束文件:dtd约束dtd文件、scheme约束xsd约束文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc=http://www.springframework.org/schema/mvc
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    </beans>

    如何让容器(spring)帮我们创建对象?

    不需要我们自己创建对象,但是以某种方式(xml配置、注解)通知容器帮我创建什么对象。

    通过xml的方式通知容器创建某个对象

          在spring的配置文件中,一个bean标签表示要容器创建一个对象

    如何获取容器中的对象

    DI:依赖注入

    方式1:set注入

    前提:有属性、必须有属性的set方法

     

    方式2:构造器注入

    前提:有对应的参数的构造方法

    方式3:p命名空间注入【p:property属性的缩写】

    前提:有p:xxx xxx属性必须有set方法,本质是采用set注入

    方式3:c命名空间注入【c:contructor构造器的缩写】

    前提:有对应参数的构造方法,本质是构造器注入

    用法同p相似

    多个配置文件的处理

    可以将创建多个spring的配置文件用来做容器,用来分类管理bean

    比如所有的实体类的bean:spring-pojo.xml

    所有dao包类的bean:spring-dao.xml

    所有service包类的bean:spring-service.xml

    解决方式1:多个配置文件是平等关系

    解决方式2:多个配置文件是包含关系

    定义一个总的配置文件,将其他被包含的配置文件通过<import>导入其他的配置文件

    或者被包含的文件取名统一的规则,可以用*进行匹配,但是主配置文件命名不是这种规则,会导致出现循环包含。

    spring容器中的bean的作用域

    作用域:spirng创建的bean对象是否是单例的

    单例:创建的对象都是同一个

    spring中创建的bean默认都是单例的

    证明:

          通过两次获取同一个bean的id,查看输出结果

    如何自定义bean的作用域

          在bean标签中设置scope属性的值

          scope的值:

                singleton:单例

                prototype:原型,多例

                request:发起一次http请求,就会创建一个新的对象

                session:新的session创建,就会创建也给新的对象

    spring中bean是什么时候创建的

    spring中的两个容器的API

    ApplicationContext:

     

    BeanFactory

     

    ApplicationContext和BeanFactory的区别

          区别主要在于创建bean对象的时间不同

          ApplicationContext在容器启动的过程中,就会创建需要的bean对象。【效率高、占内存】

          BeanFactory在容器启动过程中没有创建对象,当嗲用getBean方法的时候立马创建。

    spring容器中bean的生命周期

    1、        调用无参数构造器,创建实例实例【实例化】

    2、        调用set方法,为属性注入值

    3、        如果bean类实现了BeanNameAware接口,会执行setBeanName方法,可以获取bean的id的值

    4、        如果bean类实现了BeanFactoryAware接口,会执行setBeanFactory方法,可以获取BeanFactory对象

    5、        如果定义了bean后处理器类【写了一个类实现了BeanPostProcessor】并且在容器中进行了注册(bean标签),会执行postProcessBeforeInitialization方法

    在该方法中可以获取bean对象,也可以改变对象,通过return可以改变对象

    6、        如果bean类实现了InitializingBean接口,会执行afterPropertiesSet方法

    7、        如果bean标签中定义了init-method属性,调用对应的属性的值的方法

    8、        会执行后处理器的postProcessAfterInitialization方法

    9、        通过bean对象业务

    10、    如果bean类实现了DisposableBean接口,会调用destory方法

    11、    注意:手动调用了容器的close方法

    12、    ((ClassPathXmlApplicationContext)context1).close();

    13、    如果bean标签中定义了destroy-method属性,调用对应的属性的值的方法

    spring的ioc的注解式开发

    添加jar包

    spring中的aop的jar包,因为spring注解用到了aop技术

    配置spring的配置文件,定义要扫描的component注解包路径

    在需要创建的对象的类上面添加@Component注解【相当于配置了一个<bean>标签】

    @Component  
    
        public class UserServiceImpl{
    
    }

    容器启动后会创建UserServiceImpl类的对象,并且bean的id设置为类名的第一个字母小写,即id=” userServiceImpl”

    如果希望自定义bean的id的值,使用@Component(“id的名字”)

    为对象注入依赖的属性

    总结:

    1、如何通知容器创建对象

      @Component:通用的

      @Repository:一般用在dao类上面

      @Service:一般用在service类上面

      @Controller:一般用在控制器类上面

    2、如何让容器注入属性

      @Autowired:容器会根据类型自动注入

      @Autowired

      @Qualifier("d1") 容器根据bean的id进行精确的对象的注入

       

      @Resource:该注解不是spring里面的,是javaee里面的

      @Resource(name="d1")  即可根据类型注入也可以根据bean的id注入

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    兑奖
    杨辉三角
    偶数求和
    进制转化
    填词
    等值数目
    Spring框架的七个模块
    数据库中的第1、2、3范式 (昨天没睡好,因为那个蚊子~~)
    关于eclipse 不编译或者找不到*.class的问题
    servlet生命周期的理解
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11784827.html
Copyright © 2020-2023  润新知