Spring框架系列(二)之Bean的注解管理
微信公众号:compassblog
欢迎关注、转发,互相学习,共同进步!
有任何问题,请后台留言联系!
1、Spring中的两种容器
在系列(一)中我们已经知道,Spring 是管理对象的容器,其中有2种基本的容器,一种是 ApplicationContext,另一种是 BeanFactory (这种在开发中已经不再使用)。两种容器的区别如下:
ApplicationContext:这种容器在启动加载 applicationContext.xml 配置文件时就会创建
BeanFactory:这种容器在 getBean 的时候才会创建生成类的实例
2、Spring中Bean 的注解管理方式实例
(1)、新建项目,引入相关 jar 包,如下图所示:

(2)、在 src 下新建配置文件,开启使用注解代理配置,代码如下:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
<!-- 指定扫描com.spring.bean报下的所有类中的注解.
扫描包时,会扫描指定包下的所有子包
-->
<context:component-scan base-package="com.spring.bean"></context:component-scan>
</beans>
(3)、将对象注册到容器,并通过注解给属性注入值,代码如下:
Student.java
package com.spring.bean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
@Component("stu")
@Service("stu") // service层
@Controller("stu") // web层
@Repository("stu")// dao层
public class Student {
//基本属性
private String name;
@Value("22")
private int age;
@Autowired //自动装配,如果匹配多个类型一致的对象,将无法选择具体注入哪一个对象
private Book book;
//setter和getter方法
public String getName() {
return name;
}
@Value("孔乙己")
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", book=" + book.toString()
+ "]";
}
}
Book.java
package com.spring.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("book")
public class Book {
//基本属性
@Value("Java开发")
private String name;
@Value("68")
private double price;
//setter和getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
}
(4)、书写测试类,代码如下:
TestDemo.java
package com.spring.test;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.bean.Student;
public class TestDemo {
@Test
public void fun1(){
//1 创建容器对象
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 向容器获取stu对象
Student stu1 = (Student) ac.getBean("stu");
//3 打印stu对象
System.out.println(stu1.toString());
}
}
(5)、使用 JUnit4 进行测试,结果如下图所示:


3、Spring 中 Bean 管理的常用注解
(1)、 @Component 组件:作用在类上
Spring中提供 @Component 的三个衍生注解,功能目前是一致的,这三个注解是为了让标注类本身的用途更加清晰。
@Controller : web 层
@Service : service 层
@Repository : dao 层
(2)、属性注入的注解:使用注解注入的方式,可以不用提供 set 方法
@Value :用于注入普通类型
@Autowired :自动装配: 默认按类型进行装配,按名称注入
注意:如果匹配多个类型一致的对象,将无法选择具体注入哪一个对象@Qualifier :强制使用名称注入,告诉spring容器自动装配哪个名称的对象
@Resource :手动注入,指定注入哪个名称的对象,相当于 @Autowired 和 @Qualifier 一起使用
(3)、Bean 作用范围的注解
@Scope:
singleton :单例
prototype :多例
(4)、Bean 生命周期配置的注解
@PostConstruct :相当于 init-method方法
@PreDestroy :相当于 destroy-method方法
4、Spring 中 Bean 管理方式的比较
| 基于XML的配置 | 基于注解的配置 | |
|---|---|---|
| Bean 定义 | <bean id=" " class=" "/> | @Component 或者其衍生类 |
| Bean 名称 | 通过 id 或 name 制定 | @Component(" ") |
| Bean 注入 | <property> 属性或者或者 p 命名空间 | @Autowired 或者 @Qualifier 或者 @Resource |
| Bean 作用范围 | scope 范围属性 | @Scope |
| Bean 声明过程 | 初始化 init-methode 和销毁 destroy-method | 初始化 @PostConstruct 和销毁 @PreDestroy |
基于XML的配置:结构清晰,但开发不便
基于注解的配置:属性注入容易,开发方便
关注微信公众号compassblog,后台回复 “Spring系列二” 获取本项目源码
您可能还喜欢:
本系列后期仍会持续更新,欢迎关注!
如果你认为这篇文章有用,欢迎转发分享给你的好友!
本号文章可以任意转载,转载请注明出处!
扫码关注微信公众号,了解更多

Spring框架系列(二)之Bean的注解管理的更多相关文章
- Spring框架系列(二)--装配和注入Bean
企业日常开发中,几乎都是Spring系的框架,无论是SSM.还是现在大火的SpringBoot+JPA/MyBatis,使用最大的目的就是简化开发 基本模块: 核心容器:Beans.Core.Cont ...
- Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...
- Spring框架(3)---IOC装配Bean(注解方式)
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
- Spring框架系列之AOP思想
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...
- Spring框架系列(2) - Spring简单例子引入Spring要点
上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...
- Spring框架系列(3) - 深入浅出Spring核心之控制反转(IOC)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了IoC的基础含义,同时以此发散了一些IoC相关知识点; 本节将在此基础上进一步解读IOC的含义以及IOC的使用方式.@pd ...
- Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...
- Spring框架系列(5) - 深入浅出SpringMVC请求流程和案例
前文我们介绍了Spring框架和Spring框架中最为重要的两个技术点(IOC和AOP),那我们如何更好的构建上层的应用呢(比如web 应用),这便是SpringMVC:Spring MVC是Spri ...
- Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计
在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...
随机推荐
- Core Graphics 和Quartz 2D的区别
quartz是一个通用的术语,用于描述在IOS和MAC OS X中整个媒体层用到的多种技术 包括图形.动画.音频.适配. Quart 2D 是一组二位绘图和渲染API,Core Graphic会使用 ...
- 【开发技术】 java和JSP和JavaScript有什么区别
JSP全称是:java server page,意思是基于JAVA服务器的网页技术,跟asp,php一样,都是网页制作用的语言 JavaScript:也成为JS,跟JAVA没啥关系,就是赶时髦起个这名 ...
- mybatis_SQL缓存(5)
<settings> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value=& ...
- 修真院java后端工程师学习课程--任务1(day four)
今天学习的是spring框架,内容主要有: spring的概念,主要是做什么的: Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversio ...
- 2018年web前端学习路线图
前端的的技术一直在变化,更新和变革,现在基本是三驾马车(vue,angualr,react)主导整个前端框架,但是无论对于新人或者有经验的程序员,这些知识在必须掌握 前端必会技能 上图罗列了整个前端的 ...
- java里程碑之泛型--类型通配符
1,泛型与数组在子类上面的对比 在整理java泛型的类型通配符之前,我们先来研究下java在数组设计上的一个不合理.我们来看下面代码: public class Test { public stati ...
- shell第四篇(下)
摘自王垠的:Unix的缺陷 我想通过这篇文章解释一下我对 Unix 哲学本质的理解.我虽然指出 Unix 的一个设计问题,但目的并不是打击人们对 Unix 的兴趣.虽然 Unix 在基础概念上有一个挺 ...
- JavaScript:事件对象Event和冒泡
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章中已经讲过事件的概念.这里讲一下注册 ...
- WPF中获取系统本身自带的控件模板(XAML)
每个控件都有自己默认的模板,这是MS本身就编写好的,如果我们能够得到这些模板的XAML代码,那么它将是学习模板的最好的示例,要想获得某个控件ctrl的默认模板,请调用以下方法: string GetT ...
- mvn 手动安装jar 到本地库
安装: mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.1.0.7.0 -Dpackagi ...