java-spring个人总结(二)IoC注入、延迟加载、单例多例
来源:互联网 发布:北京生活软件 编辑:程序博客网 时间:2024/06/13 02:04
Ioc容器,我们最常使用的就是依赖注入方式了,也是为了解耦,刚开始其实觉得这个解耦主要是解开了创建对象这个步骤,减少了代码的重复性,将各个模块可以相对没有适用spring之前那样减少相互的依赖,相对便利,后面经过使用次数的增多以及阅览相关资料的篇幅逐渐增加,开始慢慢理解IOC模型的好处,它并不是启动的时候就将配置文件或者注解等元信息和JavaBean的类信息加载到IOC容器并根据配置创建模型,而是根据是否调用,再来像机械装配一样,以配置好的形式创建并注入(或者说创建)到需要并且属于扫描区域(或setter方法中)的应用类中。不常用的依赖查找就不在这里提及了。
鉴于之前已经提及了spring的依赖注入,那么直接上例子。
延迟加载
默认情况下,不是延迟加载,加载完配置后,已经创建完对象
如果配置了延迟加载,单例用到的时候才创建,且只创建一次
default : 默认值 false,不是延迟加载
false: 不是延迟加载
true: 代表延迟加载,使用到这个类的时候再去创建对象
<bean id="g4" class="com.linge.d_DI_setter.Gender" lazy-init="true"><propecomponentrty name="gender" value="男"></property></bean>
单例多例
默认为单例模式,如果为多例,则设置延迟加载为false失效,即必须延迟加载
<bean id="g4" class="com.linge.d_DI_setter.Gender" scope="prototype"><property name="gender" value="男"></property></bean>
* 1、singleton:单例(默认情况下是单例 )
* 2、prototype:多例
* 3、request:一个请求一个实例
* 4、session:一个回话一个实例
一般只有在Action也就是视图层才会用到多例
依赖注入
下文所用的xml文档,统一使用 applicationContext_DI.xml 放置于src目录下,不再提及。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
web.xml
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext_*.xml</param-value>//配置文件所在位置 </context-param>
1、通过构造方法进行依赖注入
xml(普通字符串)
<bean id="s1" class="com.linge.c_DI.Student"><constructor-arg name="namesss" value="小泽"/></bean>
普通javaBean
public class Student {//注入的普通的参数String+8大类型private String name;//无参的构造方法最好放回来public Student(){}//通过我们有参构造方法进行依赖注入public Student(String namesss){this.name = namesss;}public String toString() {return "Student [name=" + namesss};}
用于注入的javaBean
public class Score {private Integer score;//通过有参的构造方法注入分数public Score(Integer score) {super();this.score = score;} public Score() {super();}@Overridepublic String toString() {return "Score [score=" + score + "]";}
注入xml(注入javaBean)
<bean id="score1" class="com.linge.c_DI.Score"><constructor-arg name="score" value="100"></constructor-arg></bean><bean id="s2" class="com.linge.c_DI.Student"><constructor-arg name="name" value="小麻"></constructor-arg><!-- ref: 指的是bean的id,引用的JavaBean的id --><constructor-arg name="score" ref="score1"></constructor-arg></bean>
测试类
public void test1(){ApplicationContext context =new ClassPathXmlApplicationContext("config/applicationContext_DI.xml");Student s = (Student)context.getBean("s1");System.out.println(s);}
2.通过setter的方法进行依赖注入(推荐)
xml(普通字符串)
<!-- 1、注入的普通字符串 --><bean id="a1" class="com.linge.d_DI_setter.Admin"><!-- 这里的name找的是JavaBean中的setter的方法名称:只是把set这三个字符串去掉,把首字母小写 --><property name="nameStr" value="小布"></property></bean>
javaBean
public class Admin {private String name;//字符串//提供相应的setter的方法public void setNameStr(String name) {this.name = name;}
注入JavaBean
public class Gender {//通过setter的方法注入普通的字符串private String gender;public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Gender [gender=" + gender + "]";}
xml注入javaBean
<bean id="gender1" class="com.linge.d_DI_setter.Gender"><property name="gender" value="人妖"></property></bean><bean id="a2" class="com.linge.d_DI_setter.Admin"><property name="nameStr" value="小布"></property><property name="ageStr" value="18"></property><property name="gender" ref="gender1"></property></bean>
测试方法
public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("/applicaionContex.DI.xml");Object b = context.getBean("zz");System.out.println(b);}
ps:在翻查笔记的过程中,当时居然还写了一些spring2.5,3.0的新特性----简化setter方法的注入,其实本人觉得好像意义不大,下篇带过
阅读全文
0 0
- java-spring个人总结(二)IoC注入、延迟加载、单例多例
- java Spring IOC注入
- Spring IOC注入(二)构造器注入
- 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(二):模拟Spring加载配置文件
- Spring笔记(二):Ioc 之注入与装配
- Spring学习笔记(二)IOC注入方式
- Spring:IoC 用法(二、自动注入用法)
- Spring之IOC的注入方式总结
- Spring之IOC的注入方式总结
- Spring之IOC的注入方式总结
- Java拾遗之Spring IoC(二)
- Spring IOC注入(三)自动注入
- Spring总结(二) 属性注入
- spring IOC源码学习(二):BeanDefinition资源加载
- Spring IOC(二)
- Spring(二、Spring IOC)
- Spring学习(二)spring ioc注入的三种方式
- Spring学习(二)spring ioc注入的三种方式
- 使用 create-react-app 构建 react应用程序 (react-scripts)
- Android Studio 超级简单的打包生成apk
- 关于idea 与Mybatis自动扫描注册mapper bean的在IDE中提示无法自动注入的解决方案
- js实现分页控件中当前页的页标始终在中间
- Snapdragon Neural Processing Engine
- java-spring个人总结(二)IoC注入、延迟加载、单例多例
- Mybatis通用Mapper
- Oracle语法:merge into using
- 获取scrollTop实现滚动鼠标后悬浮导航
- GYM 101128 A.Promotions【思维+暴力】
- 浅谈---技术转管理可能遇到的 3 大挑战及解决方案
- JQuery基本概念,语法,选择器,事件
- spring-retry
- bzoj 4025 二分图 分治+并查集/LCT