装配SpringBean(四)--注解装配之组件扫描
前两篇文章我总结了通过XML方式装配bean的实现方式,虽然比较简单,但是需要配置很多,很多时候我们都会使用注解进行装配。使用注解的方式可以减少XML的配置,既能实现XML的功能,还提供了自动装配功能,更加有利于开发,这就是传说中的“约定优于配置”原则,简称CoC(Convention over Configuration).spring提供了两种方式让spring ioc容器发现bean:
- 组件扫描:通过定义资源的方式,让spring ioc容器扫描资源所在的包,从而装配bean;
- 自动装配:通过注解自动找到依赖关系中所需要的bean
本章先来总结一下组件扫描方式,下一篇文章总结自动装配。
组件扫描的实现步骤有三步:定义资源->扫描资源->获取资源,下面分这三步举例:
一、定义资源(使用@Component注解)
定义资源时需要用到注解@Component,component本意是组件的意思,当我们给一个类加上这个注解之后,就相当于定义了一个组件,供我们的项目所使用。下面来定义一个类,并用@Component进行装配。
@Component(value="coder")
public class Coder {
@Value("1")
private String id; @Value("张三")
private String coderName; @Value("23")
private Integer coderAge; @Value("30000")
private Integer coderSalary; public String getId() {
return id;
} public void setId(String id) {
this.id = id == null ? null : id.trim();
} public String getCoderName() {
return coderName;
} public void setCoderName(String coderName) {
this.coderName = coderName == null ? null : coderName.trim();
} public Integer getCoderAge() {
return coderAge;
} public void setCoderAge(Integer coderAge) {
this.coderAge = coderAge;
} public Integer getCoderSalary() {
return coderSalary;
} public void setCoderSalary(Integer coderSalary) {
this.coderSalary = coderSalary;
}
}
上面代码中红色加粗的部分:
1⃣️注解@Component:用@Component注解类,代表spring ioc在扫描的时候会生成这个类的bean实例,其中的value属性代表这个类在容器中的id,类似于XML方式的bean元素中定义的id属性。可以简写成@Component("coder")或者不写,不写的时候spring会使用自己的规则生成ID配置到容器中,规则是将类名首字母小写;
2⃣️注解@value:给成员变量注入值,类型会自动转换;
到这里,就完成了定义并将这个资源注入到spring ioc容器中了,那么容器怎么能获取这个资源呢,这就是需要我们进行配置的第二步,扫描资源。
二、扫描资源(使用@ComonentScan注解)
spring在扫描之前,我们是不是需要告诉它去哪里扫描?对的,我们需要定义一个配置类告诉它扫描的路径
@ComponentScan
public class PojoConfig { }
如同上面的代码,只需要定义一个配置类并加上注解@ComponentScan即可,这个注解表示spring会在当前包进行扫描,所以要想使我们定义的资源被扫描到,资源类和这个配置类就必须在同一个包下面才可以,这就有个弊端,一般来说我们的资源不会全部放在同一个包下,意味着要进行全局扫描,这可怎么办呢?还好这个注解它有两个配置项basePackages和basePackageClasses,前者代表扫描的包路径,可以是多个,后者代表扫描的类,也可以配置多个,这样我们就并用关心配置类是否和被扫描资源在同一个包下的问题了。
举个例子:
/**
* 注解@ComponentScan代表扫描当前包的路径,所以此类必须和pojo在用一个包下面
* 加上basePackageClasses和basePackages两个注解之后,可在整个项目中进行扫描找到所需的bean
*
*/
@ComponentScan(basePackageClasses = { Coder.class, CoderCard.class, CoderCardController.class, CoderCardService.class },basePackages= {"com.hyc.pojo","com.hyc.controller","com.hyc.service","com.hyc.tools"})
public class PojoConfig { }
通过这一步,spring容器就能将一个类装配成bean了,接下来就是我们怎么使用的问题,也就是第三步:获取资源。
第三步:获取资源(使用AnnotationConfigApplicationContext类)
获取资源的时候我们通过AnnotationConfigApplicationContext这个类实现,通过这个类将bean注册到spring容器当中。
public class SpringBeanTest {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context = new AnnotationConfigApplicationContext(PojoConfig.class);
Coder coder = (Coder) context.getBean("coder");
System.out.println(coder.getCoderName());
}
}
上面加粗的代码就是获取bean的方式,下面来看一下结果,按理说输出的coderName应该就是上面配置的张三。

和预期结果一致,说明通过组件方式装配成功。
装配SpringBean(四)--注解装配之组件扫描的更多相关文章
- 装配SpringBean(五)--注解装配之自动装配
在spring ioc容器中,spring要先完成bean的定义和生成,然后需要需要注入的资源,在上一篇的扫描组件中就是这样实现的.而自动装配中我们只需要定义和生成一个bean,发现bean的过程将由 ...
- IoC容器-Bean管理注解方式(组件扫描配置)
4,开启组件扫描细节配置
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(7):装配SpringBean·依赖注入装配
一.依赖注入的三种方式 在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来.另一类则是依赖注入.一般而言,依赖注入可分为3中方式: ...
- Spring IOC基础回顾 — 组件扫描和装配
目录 注解形式配置应用IOC 1. 组件自动扫描 2. 组件依赖:为bean添加注解,实现自动注入 3. Spring IOC应用小结 注解形式配置应用IOC 在类定义.方法定义.成员变量定义前使用, ...
- java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)
在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...
- Spring装配Bean之组件扫描和自动装配
Spring从两个角度来实现自动化装配: 组件扫描:Spring会自动发现应用上下文中所创建的bean. 自动装配:Spring自动满足bean之间的依赖. 案例:音响系统的组件.首先为CD创建Com ...
- Spring装配bean--01组件扫描和自动装配
Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系 Spring提供了三种主要的装配机制: 在XML中进行显式配置 在Java中进行显式配置 隐式的bean发现机制和自动装 ...
- 【Spring】装配Bean 组件扫描
实现自动装配需要用注解:注解分为 spring规范和java规范 ,java规范需要引入javax.inject 包 ,使用maven,直接引入. 从中可以看到 @Named @Inject属于jav ...
- 1 spring如何通过组件扫描和自动装配实现自动化的配置
1 首先将spring依赖的包全部导入 2 建立测试接口 public interface CompactDisc { void play(); } 3 具体的类实现接口 import org.spr ...
随机推荐
- Error parsing XML: junk after document element这样的错误 - CSDN博客
很多开发者可能在编写XML布局文件时提示Error parsing XML: junk after document element这样的错误,这里Android123提示大家一般合法的XML文件只有 ...
- Font Awesome 完全兼容 Bootstrap 的所有组件。
"F_FullName": "其他", "F_Icon": "glyphicon glyphicon-backward fa-lg ...
- Object 和Throwable
Object java.lang.Object 所有类的超类 Object里面有的方法所有的类都有 Object方法: String toString() 返回对象的字符串表现形式 类名 + @ + ...
- 20.multi_case03
# 多线程 import threading import time class myThread(threading.Thread): def __init__(self, threadID, na ...
- java中一个类不想被继承怎么办?
方法一:把类声明为final 方法二:对类中的构造器声明为private,类中提供一个static方法,完成对类的初始化.如下代码: public class Base{ private Base() ...
- ORM下实现继承的三种方式(TPH TPC TPT)
TPH(Table Per Hierarchy):所有的数据都放在同一个表格内,但是使用辨别标志(Discriminator)的方式来区分 TPC(Table Per Concrete-Type):由 ...
- 16-1-es5
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 1 环境搭建_及参考资料介绍_ASM驱动开发疑难解决
1 环境搭建 > 这里和 周壑老师不同:大家觉得哪中适合当前的物理机,就配置那种. 如下: win7 32 位: vs 2010; visualDDk 驱动项目插件: V A --- 代码高亮 ...
- vue+layui制作列表页
优点: 1.选用layui国产. 2.layui有一套完整的前端框架,基本哪来就可以用. 3.选用vue去掉了很多页面元素js拼接的繁琐,及不易修改. 4.vue里面还有一些过滤器等,用起来很方便. ...
- NBIS指纹特征提取与匹配软件使用
1. docker 创建虚拟centos 环境 2. docker 安装wget 工具 3.wget下载源代码 wget http://nigos.nist.gov:8080/nist/nbis/nb ...