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

    使用纯注解方法:
相关推荐
小许学java1 分钟前
Spring事务和事务传播机制
java·数据库·spring·事务
大学生资源网1 分钟前
基于Javaweb技术的宠物用品商城的设计与实现(源码+文档)
java·mysql·毕业设计·源码·springboot
汤姆yu3 分钟前
基于springboot的热门文创内容推荐分享系统
java·spring boot·后端
星光一影4 分钟前
教育培训机构消课管理系统智慧校园艺术舞蹈美术艺术培训班扣课时教务管理系统
java·spring boot·mysql·vue·mybatis·uniapp
lkbhua莱克瓦247 分钟前
MySQL介绍
java·开发语言·数据库·笔记·mysql
武昌库里写JAVA9 分钟前
在iview中使用upload组件上传文件之前先做其他的处理
java·vue.js·spring boot·后端·sql
董世昌4113 分钟前
什么是事件冒泡?如何阻止事件冒泡和浏览器默认事件?
java·前端
好度20 分钟前
配置java标准环境?(详细教程)
java·开发语言
嘻哈baby22 分钟前
AI让我变强了还是变弱了?一个后端开发的年终自省
后端
teacher伟大光荣且正确24 分钟前
关于Qt QReadWriteLock(读写锁) 以及 QSettings 使用的问题
java·数据库·qt