之前我们已经讲述过bean注入是什么了,也使用了xml的配置文件进行bean注入,这也是Spring的最原始的注入方式(xml注入)。

本节课就讲注解注入。

主要讲解的注解有以下几个:

@Autowired、 @Service、@Repository、@Controller 、@Component、@Bean、@Configuration、@Resource

一、@Autowired

概念:

@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

在使用@Autowired之前,我们对一个bean配置起属性时,用的是

<property name="属性名" value=" 属性值"/>

使用@Autowired之后,我们只需要在需要使用的地方使用一个@Autowired 就可以了。

代码使用:

public interface StudentService {public boolean login(String username,String password);
}
@Service
public class StudentServiceImpl implements StudentService {@Overridepublic boolean login(String username,String password) {if("crush".equals(username)&&"123456".equals(password)){System.out.println("登录成功");return true;}return false;}
}
@Controller
public class StudentController {@Autowiredprivate StudentService studentService;public void login(){boolean crush = studentService.login("crush", "123456");if(crush){System.out.println("crush"+"登录成功!!!!!");}else{System.out.println("登录失败");}}
}

测试:

    @Testpublic void login(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");StudentController student = applicationContext.getBean("studentController", StudentController.class);student.login();}

我们在使用@Autowired 之后不用再去xml文件中继续配置了。

注意细节:

1、使用@Autowired的当前类也必须由spring容器托管(打@Coponent、@Controller、@Service 、@repository)

2、不管是public 和 private 修饰的字段都可以自动注入

3、默认情况下,使用@Autowired注解的属性一定要被装配,如果在容器中找不到该类型的bean注入,就会报错。如果允许不被装配就可以将@Autowired的required属性为false

4、@Autowired 是基于类型的注入,如果当前类型属性在容器中只有一个Bean, 那么属性名不限制,但一般建议遵循类名首字母小写的规则‘

5、如果当前属性类型在容器中有个多个Bean,那么必须要通过属性名 或者 @Qualifier 指定Bean name

6、@Autowired 可以打在XXX[] 、List上 ,此时会将容器中所有XXX类型的bean 都注入进去、且属性名没有约束,但是注意可以通过@Qualifier指定注入指定beanName的bean,属性名是没有约束作用的

7、@Autowired可以打在Map<String,XXX>上,此时所有XXX类型的bean都会被注入 ,beanName 为key ,对象为value,但是注意可以通过@Qualifier指定注入指定beanName的bean,属性名是没有约束作用的

2、@Service、@Repository、@Controller、@Component

这几个注解的含义都是一样的,都是写在类上面或者接口上面,将自动注册到Spring容器。

1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 注册到Spring 容器中。

使用

@Service
public class StudentServiceImpl implements StudentService {}
@Controller
public class StudentController {}

其作用就相当于在application.xml文件中 写以下代码

<bean id="studentServiceImpl" class="com.crush.service.impl.StudentServiceImpl"/>
<bean id="studentController" class="com.crush.controller.StudentController"/>

当然如果要使注解生效,必不可少的要加上这样一行扫描包的代码

<!--让com.crush包下类中使用 spring的注解生效-->
<context:component-scan base-package="com.crush"/>

3、@Bean

@Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且交给Spring容器管理;从这我们就明白了为啥@Bean是放在方法的注释上了,因为它很明确地告诉被注释的方法,你给我产生一个Bean,然后交给Spring容器,剩下的你就别管了

4、@Configuration

@Configuration用于定义配置类 这里只简单说明。

Spring 目前是有两种配置方式的,一种是xml文件配置加Java 代码,这种是从Spring出生的时候就有了,另一种是完全使用Java代码来进行配置及编写,这是在Spring 后面版本才出的。

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

这种方式更加受java程序员的喜欢。

@Configuration
public class MyConfig {}

并且这种方式在后续的学习中,在Spring源码中使用的非常多。

5、@Resource

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Autowired 与@Resource的区别

@Autowired原理

自言自语

难啊难啊。

Spring bean注入之注解注入-- @Autowired原理相关推荐

  1. Spring注入:配置注入(set注入和构造器注入)与注解注入

    注入简介 Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤,类似于工厂模式一样,通过一个工厂制造出这个对象,如果遇到修改,只需要改一处就行了.实现spring注入一般有两种 ...

  2. java 构造器注入_Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)...

    什么是依赖注入 在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员 ...

  3. Spring依赖注入:注解注入总结

    更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.C ...

  4. 2.3.2 spring属性注入-注解注入-半注解注入-后序

    代码: spring属性注入-注解注入-半注解后序.zip - 蓝奏云文件大小:15.2 K|https://www.lanzouw.com/iCjbVvpvxaf 上一个博客的半注解是,一个类在xm ...

  5. Spring bean的三种注入方式

    Spring的一个重要原理就是IOC(Inverse Of Control),即控制反转.IOC就是一种将组件依赖关系的创建和管理置于程序外部的技术,在Spring中Bean组件的实例化和依赖关系的管 ...

  6. Spring Bean 装配和依赖注入

    Spring IOC 容器的依赖注入工作可以分为两个阶段.第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通 ...

  7. spring @bean 自动创建容器对象的原理

    一.在applicationContext.refresh方法中会调用invokeBeanFactoryPostProcessors(beanFactory),此方法会调用当前系统容器中所有注册的Be ...

  8. 【Spring】Spring高级话题-@Enable***注解的工作原理

    @EnableAspectJAutoProxy 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. @EnableAspectJAutoProxy注解 ...

  9. Spring注解注入

    spring注入方式-----注解注入 (1)操作: 首先在要注入的类前面加上: @Component(与后面三个是等价的)@Repository(持久层),@Service业务层,@Controll ...

最新文章

  1. 判断为空时候,如何判断一堆空格为空?
  2. mysql连接报错Access denied for user ‘root‘@‘localhost‘
  3. Android通过JNI调用驱动程序(完全解析实例)
  4. Java 判断文件夹、文件是否存在、否则创建文件夹
  5. 中国蚁剑 代码解压出错:【object Object】解决方法
  6. [转]new Thread的弊端及Java四种线程池的使用
  7. 工作流实战_13_flowable 待办任务列表查询
  8. 安装Ubuntu时的硬盘分区方案
  9. mysql存储引擎 sql_MySQL——存储引擎与SQL数据类型
  10. 自适应滤波器(Adaptive Filter)
  11. conda和pip卸载包的注意事项
  12. eclipse打包java_eclipse实现将Java项目打包成jar包
  13. MySQL中Packet for query is too large (1327736 1048576)错误
  14. 前端页面--瀑布流布局的实现
  15. 电子产品销售数据分析及RFM用户价值分析
  16. ECharts中使用tooltip时鼠标移入抖动问题
  17. 红外温度传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 网卡的TSO卸载功能
  19. 基于javafx和mysql的C/S版影院管理系统
  20. rewind java_Java ShortBuffer rewind()用法及代码示例

热门文章

  1. SAP ECC6.0内存参数调整和调优
  2. 税收征收管理法律制度
  3. 盒马mini带客流,老菜场攒烟火气,新老菜场交融相映成辉
  4. oracle如何创建一个定时任务,怎么创建定时任务
  5. mac电脑如何与手机同步复制粘贴_苹果换安卓手机如何同步手机自带备忘录便签?...
  6. python中赋值语句的作用_python中return可以使用赋值语句吗?
  7. 发布地图服务属性表_Web3D地图来了!腾讯位置服务正式版发布!
  8. 计算机网络拓扑结构的选择规则,赖工为您讲解计算机网络的拓扑结构
  9. Python正则表达式介绍 re.findall(pattern, str, flag=0)/re.I re.L re.M
  10. 用Python3解析html的几种操作方式,你都会用吗?