Spring容器和注解

需要学习:spring特征IoC    AOP(事务处理) 框架基本都能整合

Spring  Framwork:最基础的

先学习核心容器:IoC/DI

  IoC容器控制反转:以前需要自己一步步做,现在又外部直接给你提供管理Service和Dao,在程序中不主动去new对象,转换为由外部提供对象,称为控制反转:目的解耦        外部:IoC

    IoC容器负责对象的创建、初始化等一系列工作,被创建或者被管理的对象在IoC容器中称为Bean

  DI:依赖注入    在容器中建立bean和bean之间依赖关系的整个过程

 IoC案例 : 控制bean的作用范围,在bean中使用 scope默认的singleton是单例的       prototype非单例的

1.首先需要导入spring的坐标spring-context

2.配置bean  id是给bean起名字   class指向bean的定义类型

  

3.获取IoC容器,获取bean  

  

 4.配置DI,property   name是在类中实例化对象之前写的那个东西,ref是指向的bean

  

静态工厂配置bean在《bean》后面加上factory-mrthod指明是哪一个方法

实例化工厂配置bean需要先把工厂bean造出来然后写一个bean<>里面是  id和factory-method  和  factory-bean指向那个工厂bean

工厂模式配置bean:

  

bean生命周期:

   

 

  在<>bean里面有一个inti-method和一个destory-method   初始化和结束,想要看到destory方法执行需要关闭容器,关闭容器不能使用applicationContext需要使用后面实例化那个ClassPathXmlApplicationContext.close 暴力关闭容器

  初始化和结束,还可以实现两个接口InitializingBean和DisposableBean

  还有一个关闭方法就是设置一个勾子  告诉jvm别忘了关闭我的容器   .registShutDownHook();这句话放在哪里都可以

  其实这两种方法都不用是Tomcat去做的后面学习

依赖注入:

  向类中传递数据:setter方法或者构造方法 

  注入的类型:引用类型   简单类型(基本类型和String)

Setter方法注入引用类型就是直接配置,    简单类型就是不写成ref写value值   都是双引号包括内部会自动识别类型

  

构造器注入:就是写一个构造函数把引用类型传递进去,在配置中把property换成constructor-arg   name写形参  ref写引用的类型   简单类型一样value

  兼容性的方案,为了避免形参会改变,所以可以用type属性来规定,为了解决有两个一样的参数类型,可以用index来指向从0开始

注入方式的选择:

  强制依赖,必须要的使用构造器方法 

  可选择的用setter

  自己开发的模块推荐使用setter

 spring依赖自动装配:添加autowire后面选择方式,不过需要set方法

  只能对引用类型自动装配,简单类型不可以

  使用byType的时候必须保障容器中相同类型的bean唯一

  

数组、list、set、map、properties       格式           set自动去除重复

  

spring加载 properties文件:

        

 

  1.开启context命名空间:然后使用下面的context引入   

    取值的时候就可以用  ${jdbc.username}这样的方式取值     需要的类创建bean  在propert的时候value里面用${jdbc.username}

    context里面后面加上system-properties-mode="never"就是不加载系统的

    多个properties文件最好的方式就是     classpath*:*.proerpties

    

 

容器:

  加载容器的方法两种:用第一种

    

     获取bean的方式

      

注解开发:

  哪个实现类需要加bean就在类上面加@Component("bookDao"),在配置文件里面加上扫描<context:component-scan base-package="com.songyue"/>

    后面可以写全路径,也可以写到com可以随便,如果@Component这样写的话,后面获取bean就需要按照类型获取bean,getBean(***.class)

    作用是一样的

纯注解开发:写一个注解类代替配置文件,实现类还是那样写,获取配置文件的地方需要改一下,扫描包的时候需要扫描多个使用大括号  

        

     

  设置单利模式@scope   初始化@PostConstruct    终结@PreDestroy    自动装配@Autowired就不需要set方法了

          @Qualifier有相同类型的bean就用这个后面加上名字,不过需要和自动装配一起使用    简单类型的注入@value

        @PropertySource("")注入property等文件的时候在注解类里面写这个注解,然后取值在value里面写${,多个文件的时候使用数组的方式

  第三方bean就写一个方法用来接受这个bean,然后方法加注解@bean,然后再注解类加上@import(三方bean.class)多个也是数组的方式

    简单类型注入就是@value   引用类型就是在里面给一个形参比如dao或者service,然后再注解类里面需要扫描这个包

 

 

posted @ 2022-10-06 23:02  皇天不负有心人  阅读(59)  评论(0)    收藏  举报