栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Ioc笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Ioc笔记

1、IOC集合类型属性注入

构造注入优先级比set注入高,所以同时存在时并且对同一个属性注入时,
最后的值会是set注入的值,因为构造注入的值会被set注入的值覆盖,
不是同时注入同一个属性时,则set注入的属性为set注入的值,
其他属性为构造注入的值或null(构造也没注入)

1.1 引入命名空间util

可看bean3.xml
从而抽取公共list类型注入

1.2 spring有两种类型bean
一种是普通bean,另一种是工厂bean(FactoryBean)

可看bean4.xml

1、普通bean,在配置文件定义的bean的类型就是返回的类型

2、工厂bean, 在配置文件中定义bean的类型可以和返回类型不一样

 2.1 创建类,让这个类作为工厂bean,实现接口FactoryBean

 2.2 实现接口里面的方法,并且在实现的方法中定义返回的bean类型

1.3 bean管理的作用域以及生命周期

1 、在spring里面,创建的bean,默认是单实例

2、 在spring里面,如何设置单实例,以及如果设置多实例

scope属性值

singleton: 默认值,表示是单实例对象

   设置scope值是singleton的时候,加载spring配置文件的时候就会创建单例对象

prototype: 表示是多实例对象

   设置scope值是sprototype的时候,不是加载spring配置文件的时候创建对象,在调用getBean方法的时候创建多实例对象

1.4 bean管理的生命周期   1、通过构造器创建bean实例(无参数构造)   2、为bean的属性设置值和对其他bean引用(调用set方法)   3、调用bean的初始化方法(需要进行配置初始化的方法)   4、bean可以使用了,(对象获取到了)   5、当容器关闭的时候,调用bean的销毁方法(需要进行配置销毁的方法) 1.5 bean的后置处理器。bean的一共有7步

创建类,实现接口BeanPostProcessor,创建后置处理器

重写接口的两个方法postProcessBeforeInitialization、postProcessAfterInitialization

可看bean5.xml

会为当前配置中(也就是bean5.xml)的所有bean都添加上后置处理器

  1、通过构造器创建bean实例(无参数构造)   2、为bean的属性设置值和对其他bean引用(调用set方法)   3、把bean实例传递给bean后置处理器的方法postProcessorBeforeInitialization   4、调用bean的初始化方法(需要进行配置初始化的方法)   5、把bean实例传递给bean后置处理器的方法postProcessorAfterInitialization   6、bean可以使用了,(对象获取到了)   7、当容器关闭的时候,调用bean的销毁方法(需要进行配置销毁的方法) 1.6 自动注入

可看bean6.xml

以上方式均为手动注入,自动注入有两种

1、autowire=“byName” 通过id名称自动注入,id是唯一的,此时可以找到唯一属性

2、autowire=“byType” 同一类型,可以多次注入,当一个对象多次注入时,则会报错,
expected single matching bean but found 2: emp,emp1

2 注解方式 2.1 注解方式注入

首先引入命名空间 context
xmlns:context=“http://www.springframework.org/schema/context”
xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd”>

1.1 引入aop的依赖

1.2 在xml里面开启组件扫描



1.3 新建类并且注入

@Service(value = “testService”)
value值可以不写,当不写的时候默认为类名首字母小写

@Controller、@Service、@Repository、@Component、四个的涵义作用是一样的,只是用在不同业务上

2、1 设置扫描或者不扫描哪些内容

use-default-filters=“false” 表示不使用默认的fiter

1、设置扫描哪些内容: context:include-filter

2、设置不扫描哪些内容: context:exclude-filterr

2、2 基于注解方式实现属性注入

1、@Autowire 根据属性类型进行自动装配

2、@Qualifier 根据属性名称自动装配

@Qualifier要和@Autowire一起使用,当多个实现类的时候,类型是一样的,此时需要用@Qualifier来区分名称。

@Autowire

@Qualifier(value=“testService”)

3、@Resource 可以根据类型注入,也可以根据名称注入

@Resource(name=“testService”)。是java的扩展包,不是Spring包里面的注解
4、@Value 注入普通类型属性

@Value(value=“abc”) 给属性赋值.

private String name;

3 完全注解开发 3.1 创建配置类,替代xml配置文件
@Configuration  //作为配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.example.demo.entity.annotation","com.example.demo.entity.bean6"})
public class SpringConfig {
}
3.2 编写测试类
   public class AnnotationTest {
    //传统的xml方式测试
     @Test
     void testXml() {
       ApplicationContext context = new ClassPathXmlApplicationContext("annotationConfig/bean1.xml");
       TestService service = context.getBean("testService", TestService.class);
       System.out.println(service);
       service.test();
     }
     //使用注解方式测试
     @Test
     void testConfig() {
       AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
       TestService service = context.getBean("testService", TestService.class);
       System.out.println(service);
       service.test();
     }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号