spring IOC的注入方式总结

您所在的位置:网站首页 ioc接口注入 spring IOC的注入方式总结

spring IOC的注入方式总结

2024-07-07 01:40| 来源: 网络整理| 查看: 265

学习资源来自博客园 springIoC容器注入方式有set注入,构造器注入,注解注入。 DI的前提需要容器创建对象spring容器创建对象的方式

一、set方式注入 1.set方式注入之对象的注入   标签中,name和id起标识这个对象的作用,id会帮我们检查给对象起的名字是否规范(名字不能重复,不能有空格,不能已数字开头),name不会检查这些东西。springIoC默认是已单例模式管理对象,即通过相同的名字多次拿出来的对象一样,可以再标签中加属性 scope="prototype"代表非单例,scope="Singleton"代表单例模式。可以给某一个对象加别名,在后面加一条。可以通过stu拿对象,也可以通过s1 拿对象。当类中的一个成员变量为另一个类的对象时,在子标签中可以通过ref引入,ref的值为一个标签的name或id值。同一个类可以配置多个对象,但是标识多个对象的id或name值要不同。set方式底层会用到一个bean类的set方法,如果bean类的成员变量没有set方法却采用了set方式注入会报错。 2.set方式注入之集合的注入 3.set注入之自动注入 自动注入一般针对一个类中组合了另一类的对象。自动注入有byName注入和byType注入byName注入:spring容器会到当前的类中找property的名字,然后再根据这个名字去spring容器中找有没有和这个property名字相同的对象,有的话,就把这个对象当做参数放到setXxxx这个方法里面注入进来。(找到多个不会报错)byType注入:spring容器会根据set方法的参数类型去容器中找相匹配的对象,找到就注入,没找到就算了。如果找到多个会报错。可以在标签中加 default-autowire=“byType”,则下面的标签会根据byType方式自动注入。可以在标签中autowire=" “指定注入方式,该方式会屏蔽 default-autowire=” "。

例如:

二、构造器注入

构造器有分两种注入方式,一个根据参数类型注入,一个根据下标注入。

1.根据参数类型注入 2.根据参数下标注入   三、注解注入

类中需要无参构造器!!! 首先需要在xml文件中指定使用注解注入的包,springIoC容器读取这个文件的时候就会知道

几个注解的作用:

@Autowired 1) @Autowired使用后需要在xml文件加入以下配置才能生效: 2) @Autowired注解可以写在成员变量、setter方法、构造器函数上面 3) @Autowired默认按照byType匹配的方式进行注入,如果没有一个bean的类型是匹配的则会抛异常,如果有多个bean的类型都匹配成功了, 那么再按byName方式进行选择 4) @Autowired如果最终匹配不成功(注意一定是一个都没有找到的情况)则会抛出异常,但是如果设置为 @Autowired(required=false), 则最终匹配不成功没有不会抛出异常。 5) @Autowired可以结合@Qualifier("beanName")来使用,则可以达到byName的效果 @Resource 1) @Resource使用后需要在xml文件加入以下配置才能生效: 2) @Resource的作用和@Autowired差不多,只不过 @Resource是默认先用byName,如果找不到合适的就再用byType来注入 3) @Resource有俩个属性,name和type,使用name属性则表示要byName匹配,使用type属性则表示要byType匹配 @PostConstruct和@PreDestroy 1) 标注了@PostConstruct注解的方法将在类实例化后调用 2) 标注了@PreDestroy注解的方法将在类销毁之前调用 @Component 1) @Component注解可以直接定义bean,而无需在xml定义。但是若两种定义同时存在,xml中的定义会覆盖类中注解的Bean定义 2) @Component注解直接写在类上面即可 3) @Component有一个可选的参数,用于指定bean的名称 @Component("boss") public class Boss{} 4) @Component如果不指定参数,则bean的名称为当前类的类名小写 //和上面例子的相关相同 @Component public class Boss{} 5) @Component使用之后需要在xml文件配置一个标签 6) 表示spring检查指定包下的java类,看它们是否使用了 @Component注解 7) @Component定义的bean默认情况下都是单例模式的,如果要让这个bean变为非单例,可以再结合这个@Scope注解来达到目标@Scope("prototype") @Component是Spring中所有bean组件的通用形式, @Repository @Service @Controller 则是 @Component的细化,用来表示更具体的用例, 分别对应了持久化层、服务层和表现层。但是至少到现在为止这个四种注解的实质区别很小(甚至几乎没有),都是把当前类注册为spring容器中 的一个bean 注意: 1.component-scan标签默认情况下自动扫描指定路径下的包(含所有子包) 2.component-scan标签将带有@Component @Repository @Service @Controller注解的类自动注册到spring容器中 3.component-scan标签对标记了@Required @Autowired @PostConstruct @PreDestroy @Resource @WebServiceRef @EJB @PersistenceContext @PersistenceUnit等注解的类进行对应的操作,使注解生效 4.component-scan标签包含了annotation-config标签的作用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3