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单元测试
    每次运行测试都要编写创建工厂,比较繁琐
    在测试类上面加上这个,第一个注解声明它是测试单元

    使用纯注解方法:
相关推荐
逆风局?2 分钟前
Java基础——分层解耦——IOC和DI入门
java·开发语言
ybq1951334543121 分钟前
javaEE-8.JVM(八股文系列)
java·jvm·java-ee
计算机-秋大田30 分钟前
基于微信小程序的实习记录系统设计与实现(LW+源码+讲解)
vue.js·spring boot·后端·微信小程序·小程序·课程设计
飞翔的佩奇1 小时前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疾病防控综合管理系统(含源码+数据库+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·疾病防控
热爱学习的路人甲1 小时前
深入理解etcd(九)--- wal
后端
power-辰南1 小时前
技术架构师成长路线(2025版)
java·架构师·学习路线·技术专家
二十雨辰1 小时前
[Java基础]面向对象
java·开发语言
栗豆包2 小时前
w187社区养老服务平台的设计与实现
java·spring boot·后端·spring·tomcat
violin-wang2 小时前
如何在Intellij IDEA中识别一个文件夹下的多个Maven module?
java·spring boot·spring·maven·intellij-idea
假客套2 小时前
Java小白入门教程:LinkedList
java·开发语言