### 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作用域、依赖注入)的更多相关文章

  1. Spring:(二)DI依赖注入方式

    DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的 ...

  2. Spring—容器外的Bean使用依赖注入

    认识AutowireCapableBeanFactory AutowireCapableBeanFactory是在BeanFactory的基础上实现对已存在实例的管理.可以使用这个接口集成其他框架,捆 ...

  3. 轻松了解Spring中的控制反转和依赖注入(二)

    紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类 ...

  4. [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired

    Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配 bean是什么 bean在spring中可以理解为一个对象.理解这个对象需要换一种角度,即可将spring看做一门 ...

  5. 给力啊!这篇Spring Bean的依赖注入方式笔记总结真的到位,没见过写的这么细的

    1. Bean的依赖注入概念 依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现.在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是 ...

  6. 详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)

    使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...

  7. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载

    使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...

  8. 详解 Spring 3.0 基于 Annotation 的依赖注入实现

    Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的.然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择.Spring 3.0 的出现改变了这一状 ...

  9. SSM框架之Spring(2)IOC及依赖注入

    Spring(2)IOC及依赖注入 基于xml配置文件的实现 1.IOC (控制反转-Inversion Of Control) 控制反转(Inversion of Control,缩写为IoC),是 ...

  10. Spring中的控制反转和依赖注入

    Spring中的控制反转和依赖注入 原文链接:https://www.cnblogs.com/xxzhuang/p/5948902.html 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...

随机推荐

  1. Python中常用的模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. 71A

    #include <iostream> #include <string> using namespace std; int main() { string word; int ...

  3. iot-hub物管理bug

    物管理中,物绑定证书,如果证书被删除,将会出错 初始化用到 证书编码,证书为null时,null.code报错

  4. 用lua扩展你的Nginx(整理)-----openresty

    用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...

  5. JDK 1.8源码阅读 ArrayList

    一,前言 ArrayList是Java开发中使用比较频繁的一个类,通过对源码的解读,可以了解ArrayList的内部结构以及实现方法,清楚它的优缺点,以便我们在编程时灵活运用. 二,ArrayList ...

  6. Linux性能优化gprof使用

    gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序. gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析. gprof默认不支持多线程程序 ...

  7. python我的tkinter学习,玩玩

    1.开始 #!/usr/bin/env python #coding:utf-8 import Tkinter ############################################ ...

  8. webpack使用五

    一切皆模块 Webpack有一个不可不说的优点,它把所有的文件都都当做模块处理,JavaScript代码,CSS和fonts以及图片等等通过合适的loader都可以被处理. CSS webpack提供 ...

  9. java RE Validation常用

    import java.util.regex.Matcher; import java.ulil.regex.Pattern; public class RegExpUtil { public sta ...

  10. WebSocket.之.基础入门-后端响应消息

    WebSocket.之.基础入门-后端响应消息 在<WebSocket.之.基础入门-前端发送消息>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 inde ...