依赖注入|依赖注入 javax inject中 Inject Named Qualifier和 Provider用法
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
这个是 Java EE 6 规范 JSR 330 -- Dependency Injection for Java 中的东西,也就是 Java EE 的依赖注入。
根据 API document 上的说明,被 @Inject 标注的构造、成员字段和方法是可注入的。
其包可以在 jcp.org 上找到,并可以在这里下载:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_JCP-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=dependency_injection-1.0-final-oth-JSpec@CDS-CDS_JCP
【依赖注入|依赖注入 javax inject中 Inject Named Qualifier和 Provider用法】
Spring自带的@Autowired的缺省情况等价于JSR-330的@Inject注解;Spring自带的@Qualifier的缺省的根据Bean名字注入情况等价于JSR-330的@Named注解;Spring自带的@Qualifier的扩展@Qualifier限定描述符注解情况等价于JSR-330的@Qualifier注解。
用过Spring框架的我们都知道,每当生成依赖注入的时候,我们都必须生成相应类的set方法,而且要在set方法上面写上@Autowired,才能实现依赖注入,如下:
Java代码
文章图片
- package com.kaishengit.web;
- import com.kaishengit.service.ProjectService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- @Controller
- public class FolderController {
- private ProjectService projectService;
- //set
- @Autowired
- public void setProjectService(ProjectService projectService) {
- this.projectService = projectService;
- }
- }
Java代码
文章图片
- package com.kaishengit.web;
- import com.kaishengit.service.ProjectService;
- import org.springframework.stereotype.Controller;
- import javax.inject.Inject;
- @Controller
- public class FolderController {
- @Inject
- private ProjectService projectService;
- }
@Inject
@Inject支持构造函数、方法和字段注解,也可能使用于静态实例成员。可注解成员可以是任意修饰符(private,package-private,protected,public)。注入顺序:构造函数、字段,然后是方法。父类的字段和方法注入优先于子类的字段和方法,同一类中的字段和方法是没有顺序的。
@Inject注解的构造函数可以是无参或多个参数的构造函数。@Inject每个类中最多注解一个构造函数。
在字段注解:
- 用@Inject注解
- 字段不能是final的
- 拥有一个合法的名称
- 用@Inject注解
- 不能是抽象方法
- 不能声明自身参数类型
- 可以有返回结果
- 拥有一个合法的名称
- 可以有0个或多个参数
[上述翻译:inject的doc文档,翻译不好敬请谅解]
构造函数注解:
[java]view plain copy
- @Inject
- public House(Person owner) {
- System.out.println("---这是房屋构造函数---");
- this.owner = owner;
- }
[java]view plain copy
- @Inject private Person owner;
[java]view plain copy
- @Inject
- public void setOwner(Person owner) {
- this.owner = owner;
- }
SpringUtil类:
[java]view plain copy
- public class SpringUtil {
- private static ApplicationContext context = null;
- public static ApplicationContext getApplicationContext() {
- if (context == null) {
- context = new ClassPathXmlApplicationContext("spring.xml");
- }
- return context;
- }
- public static ApplicationContext getApplicationContext(String path) {
- return new ClassPathXmlApplicationContext(path);
- }
- public static ApplicationContext getAnnotationConfigApplicationContext(String basePackages) {
- return new AnnotationConfigApplicationContext(basePackages);
- }
- }
[java]view plain copy
- import javax.inject.Named;
- @Named
- public class Person {
- private String name;
- public Person() {
- System.out.println("---这是人的构造函数---");
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
推荐阅读
- 带有Hilt的Android上的依赖注入
- 解决SpringBoot引用别的模块无法注入的问题
- 11-代码注入
- Vue源码分析—响应式原理(二)
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- 依赖注入模块
- IDEA使用Maven管理项目包,缺少pom文件中引入的依赖包
- 防止sql注入
- SpringBoot解决Shiro导致依赖注入的bean事务失效问题
- spring5源码系列--循环依赖|spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖