跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。
特定组件包括:
1、@Component:基本注解,识别一个受Spring管理的组件
2、@Respository:标识持久层组件
3、@Service:标识业务层组件
4、@Controller:标识表现层组件
Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称
当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件中声明<context:component-scan> :
1、base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类.
2、当需要扫描多个包时, 可以使用逗号分隔.
3、<context:include-filter />和<context:exclude-filter />
<!-- 扫描@Controller注解 -->
<context:component-scan base-package="com.hzg.controller" use-default-filters="false">
<context:include-filter type="annotation"expression="org.springframework.stereotype.Controller" />
</context:component-scan> <!-- 配置扫描注解,不扫描@Controller注解 -->
<context:component-scan base-package="com.hzg.controller">
<context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller" />
</context:component-scan>
当使用<context:include-filter />的时候,在<context:component-scan >里必须加上use-default-filters="false",否则不起作用。
其中属性expression的值不是你的包所在位置,别搞错了,它是你注解的具体类地址。
实例:
创建包com.hzg.anotation
创建包com.hzg.anotation.controller
创建UserController类
@Controller
public class UserController { @Autowired(required = false)
private UserService userService;
//@Autowired也可以放在setter方法上,那就去掉上面的Autowired注解
public void setUserService(UserService userService) {
this.userService = userService;
} public void excute(){
System.out.println("UserController excute");
userService.diao();
}
}
创建包com.hzg.anotation.service
创建UserService类
@Service
public class UserService { @Autowired
private UserRepostory userRepostory;
public void diao(){
System.out.println("UserService diao");
userRepostory.save();
}
}
创建包com.hzg.anotation.repostory
创建UserRepostory接口
public interface UserRepostory {
void save();
}
创建UserRepostoryImlp类
@Repository("userRepostory")
public class UserRepostoryImlp implements UserRepostory {
@Override
public void save() {
System.out.println("UserRepostory save");
}
}
创建configautowire.xml文件
<context:component-scan base-package="com.hzg.anotation"></context:component-scan>
Main方法
public static void main(String[] args) {
2 ApplicationContext ctx = new ClassPathXmlApplicationContext("configautowire.xml");
3 UserController userController = (UserController) ctx.getBean("userController");
4 userController.excute();
}
输出接口:
UserController excute
UserService diao
UserRepostory save
其中:
1、@Autowired(required = false)中required = false的意思是:如果没有这个类的实例化,那么会赋值成NULL,而不是报错。
2、@Autowired注解可以为成员变量、方法、构造函数赋值。
3、@Repository("userRepostory")等同于@Repository(value = "userRepostory"),value是默认值,代表给这个Bean
赋值了id的值,防止有重复的Bean。
4、如果在UserService类的@Autowired下面使用限定修饰符@Qualifier("userRepostoryImlp"),那么
@Repository("userRepostory")必须写成@Repository或者写成@Repository("userRepostoryImlp"),否则就有歧义了。
------------------------------------------------------------------------------------------------------------------------
跟着刚哥学习Spring框架系列:
跟着刚哥学习Spring框架--创建HelloWorld项目(一)
跟着刚哥学习Spring框架--Spring容器(二)
跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
跟着刚哥学习Spring框架--AOP(五)
跟着刚哥学习Spring框架--JDBC(六)
跟着刚哥学习Spring框架--事务配置(七)
跟着刚哥学习Spring框架--通过注解方式配置Bean(四)的更多相关文章
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- 跟着刚哥学习Spring框架--创建HelloWorld项目(一)
1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...
- 跟着刚哥学习Spring框架--AOP(五)
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...
- 跟着刚哥学习Spring框架--Spring容器(二)
Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用. Bean是S ...
- 跟着刚哥学习Spring框架--事务配置(七)
事务 事务用来保证数据的完整性和一致性. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.1.原子性(atomicity).一个事务是一个不可分割的工作单位,事务 ...
- 跟着刚哥学习Spring框架--JDBC(六)
Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要提供JDBC模板方式.关系数据库对象化方式.SimpleJdbc方式.事务管理来简 ...
- spring之通过注解方式配置Bean(一)
(1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...
- Spring使用ioc注解方式配置bean
context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...
- Spring初学之注解方式配置bean
直接看代码: UserController.java package spring.beans.annotation.controller; import org.springframework.be ...
随机推荐
- kbmmw 5.0 beta1 发布
经过大半年的等待,kbmmw 的新版终于来了.经过近5年的打磨, kbmmw 的版本号升级到5了. kbmMW is a portable, highly scalable, high end app ...
- hashCode() 和equals() 区别和作用(转)
出处:https://www.jianshu.com/p/5a7f5f786b75 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么 ...
- java socket之上传文件
一.功能介绍 该功能主要实现,将客户端的:F:/work/socketSample/filetemp/client/test_client.txt上传到服务端F:/work/socketSample/ ...
- 移动构造函数(c++11)
1.概念 1)C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用:第二种一般可以认为是对右值的拷贝 2)C++11中引入了移动构造函数,对象发生拷贝时 ...
- VMware14 安装CentOS7及其配置;CentOS7配置网桥,做远程连接;
1.VMware14安装 进入百度链接,按照图形安装就好了.https://jingyan.baidu.com/article/9f7e7ec09da5906f281554d6.html ...
- DDR4 PSOD输出的优点--DBI的优点
DDR4是JEDEC组织关于DRAM器件的下一代标准.DDR4主要是针对需要高带宽低功耗的场合.这些需求导致了DDR4芯片引入了一些新的特点,这些新的特点,导致在系统设计中,引入一些新的设计需求. D ...
- 07-css的继承性和层叠性
css有两大特性:继承性和层叠性 继承性 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的层面 ...
- Redis源码笔记-初步
目录 目录 1 1. 前言 2 2. 名词 2 3. dict.c 2 3.1. siphash算法 2 3.2. 核心函数 3 3.3. 核心宏 3 3.4. 核心结构体 3 3.4.1. dict ...
- MyBatis(一)helloWorld程序
一.准备两个jar包,第一个:下载myBatis-3.3.1.jar,这里是在CSDN网站处下载的,因为官网打不开.第二个:mysql-connector-java-5.0.8-bin.jar,这个j ...
- Objective-C的泛型
WWDC2015的明星是Swift.在Swift语言到2.0以后会被开源,这其中包括了protocol扩展和一个新的错误处理API. 苹果的小baby已经长成,并且意料之中的获得了开发者的关注.但是在 ...