spring依赖注入原理与用法实例分析
人气:0本文实例讲述了spring依赖注入原理与用法。分享给大家供大家参考,具体如下:
一 点睛
控制反转和依赖注入在Spring环境下是等同的概念,控制反转是通过依赖注入实现的。所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
依赖注入的主要目的是为了解耦,体现一种组合的概念。如果你希望你的类具备某项功能的时候,是继承自一个具有次功能的父类好呢?还是组合另外一个具有此功能的类好呢?答案是不言而喻的,继承一个父类,子类和父类耦合了,组合另外一个类则使耦合度大大降低了。
Spring IoC 容器(ApplicationContext)负责创建Bean,并通过容器将功能Bean注入到你需要的Bean中。
Spring提供使用xml、注解、Java配置、groovy配置实现Bean的创建和注入。
无论是xml配置、注解还是Java配置,都被称为配置元数据,所谓元数据即描述数据的数据。元数据本身不具备任何可执行的能力,只有通过外界代码来对这些元数据进行解析后进行一些有意义的操作。Spring容器解析这些元数据进行Bean初始化,配置和管理依赖。
二 声明Bean的注解
- @Component组件:没有明确的角色。
- @Service:在业务逻辑层(service层)使用。
- @Respository:在数据访问层(dao层)使用。
- @Controller:在展现层(MVC->Spring MVC)使用。
三 注入Bean的注解
- @Autowired:Spring提供的注解
- @Inject:JSR-330提供的注解
- @Resource:JSR-250提供的注解
- @Autowired、@Inject、@Resource可注解set方法上或者属性上,一般习惯注解在属性上,优点是代码更少、层次更清晰。
四 实战
1 编写功能类的Bean
package com.wisely.highlight_spring4.ch1.di; import org.springframework.stereotype.Service; //使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。 //使用@Component、@Service、@Respository、@Controller是等效的,可 //根据需要选择 @Service public class FunctionService { public String sayHello(String word){ return "Hello " + word +" !"; } }
2 使用功能类Bean
package com.wisely.highlight_spring4.ch1.di; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service //使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean public class UseFunctionService { //使用@Autowired 将FunctionService的实体Bean注入到UseFunctionService中 //让UseFunctionService具备FunctionService的功能,此处使用JSR-330的Inject //注解或者JSR-250的@Resource注解等效 @Autowired FunctionService functionService; public String SayHello(String word){ return functionService.sayHello(word); } }
3 配置类
package com.wisely.highlight_spring4.ch1.di; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration //@Configuration声明当前类是一个配置类。 //使用@ComponentScan,自动扫描包下所有@Component、@Service、@Respository、@Controller //的类,并注册为Bean @ComponentScan("com.wisely.highlight_spring4.ch1.di") public class DiConfig { }
4 运行类
package com.wisely.highlight_spring4.ch1.di; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { //使用AnnotationConfigApplicationContext作为Spring容器,接收 //一个配置类作为参数 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class); //获得声明配置UseFunctionService的Bean UseFunctionService useFunctionService = context.getBean(UseFunctionService.class); System.out.println(useFunctionService.SayHello("world")); context.close(); } }
五 测试
Hello world !
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
- Spring入门配置和DL依赖注入实现图解
- 详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
- Spring bean的实例化和IOC依赖注入详解
- SpringBoot的拦截器中依赖注入为null的解决方法
- 浅谈Spring IoC容器的依赖注入原理
- 理解Spring中的依赖注入和控制反转
- Spring依赖注入的三种方式实例详解
- Spring quartz Job依赖注入使用详解
- Spring依赖注入的三种方式小结
- 因Spring AOP导致@Autowired依赖注入失败的解决方法
- Spring依赖注入的两种方式(根据实例详解)
- Spring 依赖注入的几种方式详解
- Spring 依赖注入实现示例
加载全部内容