组件扫描: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(四)的更多相关文章

  1. 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

    Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ cl ...

  2. 跟着刚哥学习Spring框架--创建HelloWorld项目(一)

    1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...

  3. 跟着刚哥学习Spring框架--AOP(五)

    AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...

  4. 跟着刚哥学习Spring框架--Spring容器(二)

    Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是S ...

  5. 跟着刚哥学习Spring框架--事务配置(七)

    事务 事务用来保证数据的完整性和一致性. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.1.原子性(atomicity).一个事务是一个不可分割的工作单位,事务 ...

  6. 跟着刚哥学习Spring框架--JDBC(六)

    Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要提供JDBC模板方式.关系数据库对象化方式.SimpleJdbc方式.事务管理来简 ...

  7. spring之通过注解方式配置Bean(一)

    (1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...

  8. Spring使用ioc注解方式配置bean

    context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...

  9. Spring初学之注解方式配置bean

    直接看代码: UserController.java package spring.beans.annotation.controller; import org.springframework.be ...

随机推荐

  1. python学习 day11 (3月16日)----(生成器内置函数)

    1生成器 1生成器的本质 一定是迭代器(反之不一定(用send(生成器特有方法)验证))2生成器是可以让程序员自己定义的一个迭代器3生成器的好处,节省内存空间4生成器的特性,一次性的,惰性机制,从上往 ...

  2. android开发笔记(2)

    我之前完成了SDK的安装,这次需要在eclipse中导入相关的控件. 一.下载ADT 在之前下载的网站上下载相关的ADT的压缩包. 二.在eclipse中进行导入 在eclipse中的Help-> ...

  3. oracle 锁表查看与解锁

    查看被锁的表: select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.objec ...

  4. 844. Backspace String Compare

    class Solution { public: bool backspaceCompare(string S, string T) { int szs=S.size(); int szt=T.siz ...

  5. 2019.02.09 codeforces451 E. Devu and Flowers(容斥原理)

    传送门 题意简述:给出n堆花,对于第j堆,有f[j]朵花,每堆花的颜色不同,现在要从中选出s朵,求方案数. 思路: 假设所有花没有上限直接插板法,现在有了上限我们用容斥扣掉多算的 状压一下再容斥:fi ...

  6. java正则表达式笔记

    import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntax ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE(博弈,记忆化搜索)

    链接https://nanti.jisuanke.com/t/31454 思路 开始没读懂题,也没注意看数据范围(1000*200的状态,记忆化搜索随便搞) 用记忆化搜索处理出来每个状态的胜负情况 因 ...

  8. mybatis xml中的大于、小于等符号写法

    xml特殊符号转义写法 <          < >          > <>   <> &      & &apos;   ...

  9. .net升级到4.0之后,出现;System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798

    今天在做从Silverlight页中跳转到aspx页的时候,出现错误: 第一次跳转的时候就出现这个错误,然后在点跳转或者刷新这个错误页面,问题就没有了. 解决方案: 在C:\Program Files ...

  10. 使用 WLST 和节点管理器来管理服务器

    使用节点管理器启动计算机上的服务器 WLST 可以连接至在任何计算机上运行的节点管理器,并能够在此计算机上启动一个或多个 WebLogic Server 实例.要通过此技术使用 WLST 和节点管理器 ...