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 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...
随机推荐
- Scala的apply unapply unapplySeq 语法糖
apply 可以理解为注入 unapply unapplySeq 可以理解为提取 apply 与 unapply 虽然名字相近,但是使用起来区别挺大.apply有点像构造函数unapply主要是结合模 ...
- java.lang.SecurityException: Permission Denial: writing android.support.v4.content.FileProvider uri
在使用红米手机拍摄照片时,出现闪退的情况. 调用系统相机拍摄照片,使用FileProvider.getUriForFile传入Uri时,报异常 java.lang.SecurityException: ...
- Python生态工具、文本处理和系统管理(虚拟)
一.Python生态工具 一.Python内置小工具 1.秒级启动一个下载服务器 Python 内置了一个下载服务器就能够显著提升效率了 . 例如, 你的同事要让你传的文件位于某一个目录下,那么,你可 ...
- 【LeetCode每天一题】Pow(x, n)(平方)
Implement pow(x, n), which calculates x raised to the power n (x,n). Example 1: Inpu ...
- JS 8-1 OOP概念与继承
function Foo(){ this.y=2; } typeof Foo.prototype; Foo.prototype.x = 1; var obj3= new Foo(); obj3.x; ...
- express框架之session 存储
1.express-session 是基于express框专门用于处理session的中间件.这里不谈express-session怎么安装,只给出相应的实例代码.另外,session的认证机制离不开 ...
- cocos2d JS-(JavaScript) JavaScript 中的简单继承关系
JavaScript 语言本身没有提供类,没有其他语言的类继承机制,它的继承时通过对象的原型实现的,但这不能满足我们对 Cocos2d-JS 引擎的要求,所有类都直接或间接继承实现的. var Per ...
- 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务
1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo): (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...
- html5-表单的综合实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- hdu4746莫比乌斯反演+分块
http://blog.csdn.net/mowayao/article/details/38875021 题意: 5000组样例. 问你[1,n] 和 [1,m]中有多少对数的GCD的素因子个数小于 ...