Spring IOC详解:掌握控制反转的核心原理与实践应用

  1. 控制反转,不用自己去new对象
  2. 分层式一站式的轻量型框架
  3. maven java项目
  4. utils工具类、controller表现层、service业务层、mapper\dao持久层、moudlle\jopo\domian\entity实体类
  5. resources里面的mapper文件夹存放xxxmapper.xml文件
  6. service放业务的接口只声明方法不进行实现。有一个impl文件夹来实现这个接口
  7. test文件夹写测试类,普通调用方法:创建对象来调用方法;

    IOC:首先配置applicationContext.xml文件,在配置文件中编写标签,将类交给spring管理(bean工厂),里面写的是类不是接口,这样就不需要自己去创建对象来调用方法了。

    spring工厂加载配置文件创建了对象

    spring创建的对象默认是单例的,创建两次,但是只有一个对象,使用的使用一个。

    ClassPathXmlApplicationContext是相对路径,直接写文件名称即可,FileSystemXmlApplicationContext是绝对路径需要写本地文件的路径。
  8. Bean****管理的配置文件方式
    id属性,Bean起个名字,在约束中采用ID的约束,唯一,取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符。
    class属性,Bean对象的全路径。
    scope属性,scope属性代表Bean的作用范围。
    singleton单例(默认值),最常用的方式。
    prototype多例
    request应用在Web项目中,每次HTTP请求都会创建一个新的Bean
    session应用在Web项目中,同一个HTTP Session 共享一个Bean
    Bean对象的创建和销毁的两个属性配置
    说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法
    init-method,当bean被载入到容器的时候调用init-method属性指定的方法
    destroy-method,当bean从容器中删除的时候调用destroy-method属性指定的方法
  9. 实例化bean对象的三种方式
    实例化的对象是无参构造方法:
    <bean id="us" class="cn.tx.service.UserServiceImpl" />
    静态工厂实例化:
    < bean id = "us" class = "cn.tx.demo1.StaticFactory" factory - method = "createUs" />
    creatUs是静态方法
    动态工厂实例化:

dfactory" class="cn.tx.demo1.Dfactory" />
dfactory" factory-method="createUs" />

  1. 依赖注入(spring ioc的核心技术)
    将依赖对象注入到Bean组件中!(DI)
  • 属性的set方法注入值:
    提供属性的set方法,

    复制代码
      <bean id="os" class="cn.tx.service.OrderServiceImpl">
    
          <property name="orderDao" ref="od" />
    
          <property name="msg" value="你好" />
    
          <property name="age" value="30" />
    
      </bean>
    
      <bean id="od" class="cn.tx.dao.OrderDaoImpl"></bean>

基本类型使用value,其他类型使用:ref

  • 属性构造器方法方式注入值,有参构造器:

    <bean id="car" class="cn.tx.demo2.Car"> <constructor-arg name="cname" value="大奔" /> <constructor-arg name="money" value="400000" /> </bean> <bean id="car" class="cn.tx.demo2.Car"> <constructor-arg index="0" value="大奔" /> <constructor-arg index="1" value="400000" /> </bean>
  1. 数组,集合**(List,Set,Map)****,Properties等的注入**

    <bean id="collectionBean" class="cn.tx.demo3.CollectionBean"> <property name="strs"> <array> <value>美美</value> <value>小凤</value> </array> </property> <property name="list"> <list> <value>熊大</value> <value>熊二</value> </list> </property> <property name="map"> <map> <entry key="aaa" value="老王"/> <entry key="bbb" value="小王"/> </map> </property> <property name="properties"> <props> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property> </bean>

都是用property标签
数组array;list集合list;map集合map---entry--key--value;properties:props--prop

  1. 多配置文件的加载方式
  • 主配置文件中包含其他的配置文件:
  • 工厂创建的时候直接加载多个配置文件:
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
    "applicationContext.xml","applicationContext2.xml");
  1. IOC注解的方式(半注解、纯注解)
  • 半注解
    @component(value="os")相当于application.xml文件中的bean,交给spring来管理

    需要在application.xml文件种开启扫描注解

    @Autowired,根据属性的类型注入这个类的实现类来进行赋值,可以不提供set方法
  1. bean管理类常用注解
    @compnent
    @Controller表现层
    @Service业务层
    @Repository 持久层(dao\mapper)
    compnent包括其他三个,这四个注解的意义就是将该类创建的对象交给spring去管理。
  2. 依赖注入常用的注解
    @Value 用于注入普通类型(String,int,double等类型)
    @Autowired 默认按类型进行自动装配( 引用类型 ),当类型有多个实现类的时候使用Qualifier注解
    @Qualifier 和@Autowired一起使用,强制使用名称注入
    @Resource Java提供的注解 ,也被支持。使用name属性,按名称注入
    对象生命周期(作用范围)注解,代替上面那一种方式

    @Scope 生命周期注解,取值singleton(默认值,单实例)和prototype(多例)
    初始化方法和销毁方法注解(了解),直接写在方法上
    @PostConstruct 相当于init-method
    @PreDestroy 相当于destroy-method
  3. 纯注解
    纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。


    @Configuration 声明配置
    @ComponentScan 扫描具体包结构的
    @Import注解 Spring的配置文件可以分成多个配置的,编写多个配置类。用于导入其他配置类

    还可以扫描多个包或者再测试方法中,加载多个配置类(一般不用这种方法)
    @bean也是交给spring管理的注解,但是一般放在方法上面,一般加在方法上面。,一般用于第三方的,比如:datasource,没有写这个类,只能通过new第三饭放的东西交给spring 框架去管理。
  4. Spring框架整合JUnit单元测试
    每次运行测试都要编写创建工厂,比较繁琐
    在测试类上面加上这个,第一个注解声明它是测试单元

    使用纯注解方法:
相关推荐
zzx_nihao7 分钟前
Java29:Spring MVC
java·spring·mvc
JAVA坚守者11 分钟前
Java 服务器端 jar 包内 class 文件替换与配置文件修改高级技术指南
java·pycharm·jar
化作晚霞11 分钟前
JVM有什么调优参数?
java·开发语言·jvm
callJJ15 分钟前
Floyd算法求解最短路径问题——从零开始的图论讲解(3)
java·算法·动态规划·图论·dijkstra算法·floyd算法·最短路径问题
jason成都16 分钟前
asp.net core webapi+efcore
后端·asp.net
浩哲Zhe19 分钟前
Java Web 之 Tomcat 100问
java·前端·tomcat
Seven9725 分钟前
JDK的SPI有什么缺陷?dubbo做了什么改进?
java·dubbo
uhakadotcom1 小时前
SuperScale如何用ASO让《Tiny Tower》在Google Play自然下载量暴增450%以上
后端·面试·github
zizisuo1 小时前
Spring MVC
java·spring·mvc
风象南1 小时前
SpringBoot中5种动态代理实现
spring boot·后端