spring总结之二(Bean作用域、依赖注入)
### Bean的作用域:单例(singleton),多例(prototype)
1.单例模式:表示在任何地方使用对象,总是一个(对象是唯一的)。
(笔面试重点)
饿汉式
public class King{
private final static King king = new King();
private King(){
}
public static King getKing(){
return king;
}
}
懒汉式
public class King{
private static King king ;
private King(){
}
public static King getKing(){
if(king==null){
king = new King();
return king;
}else{
return king;
}
}
}
public class King{
}
<bean id="king" class="xx.xx.King"/>
King king1 = ac.getBean("king",King.class);
King king2 = ac.getBean("king",King.class);
System.out.println(king1==king2)
--------------------------------------------------------------------------------
开发步骤
1.创建maven工程
1)添加web.xml
2) 添加Tomcat运行环境
3)在pom.xml添加依赖jar包 spring-webmvc junit
4)添加配置文件
2.编写King类
public class King {
}
3.在配置文件中配置Bean
<!-- 默认spring实例化的对象是单例的
1.scope表示设置对象的作用域
2.如果把对象设置为多例,那么scope="prototype"
3.singleton表示单例的属性值
-->
<bean id="king" class="cn.sjl.spring.bean.King"
scope="singleton"/>
###Bean的延迟加载
1.立即加载:在spring容器读取配置文件时候,对象就被创建,这个时候创建的对象就是立即加载。
2.延迟加载: 不是读取配置文件时创建对象,而是使用对象时创建对象。 好处:可以节省内存
3.配置延迟加载
<!--
默认创建对象的时机是立即加载
1.lazy-init表示设置是否延迟加载
2.lazy-init="true"表示延迟加载
-->
<bean id="king1" class="cn.sjl.spring.bean.King"
scope="singleton" lazy-init="true"/>
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### IOC(重要):控制反转(Inversion Of Control),原来创建对象和管理对象由程序代码完成,使用spring之后,创建对象和管理对象的权利交给Spring容器(交给配置文件),控制权的转移叫控制反转。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
###给成员变量赋值(依赖注入DI)
spring中赋值的两种方式:1.set方法 2.构造方法
思路:页面-控制器-业务层-持久层
1.使用set方法赋值(推荐使用)
1.在cn.sjl.dao包新建接口UserDao
public interface UserDao{
void insertUser();
void updateUser();
void deleteUser();
void seletById();
void seleteAll();
}
2.新建接口的实现类:把接口中的方法实现,在方法中做控制台输出
public class UserDaoImpl implements UserDao{
public void insertUser(){
System.out.println("添加成功");
}
......
}
3.在cn.sjl.service包中定义业务层的接口UserService
public interface UserService{
void addUser();
}
4.新建接口的实现类UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void addUser(){
userDao.insertUser();
}
}
5.配置文件
<bean id="userDao" class="cn.sjl.dao.UserDaoImpl"/> <bean id="userService" class="cn.sjl.service.UserServiceImpl">
//1.property表示给成员变量(属性)赋值
//2.调用set方法
//3.name表示属性名
//4.ref表示bean的id名
<property name="userDao" ref="userDao"/>
</bean>
测试:
getBean("userService",XXX);
cn.sjl.servlet
public class UserServlet{
pivate UserServie userService;
//setXX...
public void doGet(){
userService.addUser();
}
}
实例化UserServlet,使用set方法给userService依赖注入
测试:获取UserServlet对象,调用doGet方法.
2.构造方法赋值
1.定义带参的构造方法
public UserServletImpl(){
}
public UserServletImpl(UserDao userDao){
this.userDao = userDao;
}
<bean id="userService2" class="cn.sjl.service.UserServiceImpl">
//constructor-arg表示构造方法赋值
//index表示构造方法参数的索引,从0开始
//ref表示已经实例化的对象的id属性值
<constructor-arg index="0" ref="userDao"/>
</bean>
3.自动装配(了解)
byName byType
//1.autowire表示使用自动装配的方式给成员变量赋值
//2.byName表示匹配UserServiceImpl属性名赋值
<bean id=“userService3” class=“xxx.xx.UserServiceImpl” autowire=“byName”/>
//1.byType表示根据属性的类型匹配UserDao userDao;
//2.如果匹配的相同类型的对象有多个,会出现异常。
<bean id=“userService4” class=“xxx.xx.UserServiceImpl” autowire=“byType”>
再看看书(新书和旧书),这个Spring笔记2,配置文件id是接口名,一个好像是实现类的名字,还是说id这个是随意的,是多态的上溯造型?还是随意的?自动装配的相关注解看看;
--------------------------------------------------------------------------------------------------------------------------------------------
spring总结之二(Bean作用域、依赖注入)的更多相关文章
- Spring:(二)DI依赖注入方式
DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的 ...
- Spring—容器外的Bean使用依赖注入
认识AutowireCapableBeanFactory AutowireCapableBeanFactory是在BeanFactory的基础上实现对已存在实例的管理.可以使用这个接口集成其他框架,捆 ...
- 轻松了解Spring中的控制反转和依赖注入(二)
紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类 ...
- [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired
Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配 bean是什么 bean在spring中可以理解为一个对象.理解这个对象需要换一种角度,即可将spring看做一门 ...
- 给力啊!这篇Spring Bean的依赖注入方式笔记总结真的到位,没见过写的这么细的
1. Bean的依赖注入概念 依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现.在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是 ...
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)
使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现
Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的.然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择.Spring 3.0 的出现改变了这一状 ...
- SSM框架之Spring(2)IOC及依赖注入
Spring(2)IOC及依赖注入 基于xml配置文件的实现 1.IOC (控制反转-Inversion Of Control) 控制反转(Inversion of Control,缩写为IoC),是 ...
- Spring中的控制反转和依赖注入
Spring中的控制反转和依赖注入 原文链接:https://www.cnblogs.com/xxzhuang/p/5948902.html 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...
随机推荐
- Pycharm增加新安装Python的路径
Pycharm默认的Python是python2,但是如果代码是python3写的,就需要在pycharm里的project interpreter增加python3 注意,一定要找到Project ...
- iOS 元件组件-创建静态库static library
概述 在项目开发的过程中,经常使用静态库文件.例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节. 库是一些没有mai ...
- JavaScript原型规则和实例
var arr = [] // var arr = new Array() var obj = {} // var obj = new Object() function fn() {} // var ...
- c#之字符串,列表,接口,队列,栈,多态
1.字符串的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- HTML-CSS线性渐变
实现背景的渐变可以通过为背景添加颜色渐变的图片,也可以使用浏览器的功能来为背景添加渐变的颜色 在IE6或IE7浏览器下可以使用一下示例的CSS语句,设置filter属性来实现颜色 filter:pro ...
- laravel 前后端分离 token
由于自己开发的项目中用到了 JWT 技术,前端采用了 Vue.js 框架,后端采用了 CodeIgniter 框架,故作此文帮助使用相同技术栈的朋友们. 具体思路如下:把后端生成的 JWT token ...
- programmatically detect whenever test run is in debug mode
if (System.Diagnostics.Debugger.IsAttached) // code or timeout value when running tests in debug ...
- java outterLoop跳出多重循环用法以及详解
List<CommResultMsg> listresult=new ArrayList<CommResultMsg>(); outterLoop :for (int i = ...
- html5-常用的通用元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- sitecore系统教程之使用修补程序文件自定义Sitecore配置
您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...