spring依赖注入注解
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring依赖注入注解内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring依赖注入注解相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring依赖注入注解相关知识
-
spring依赖注入——循环依赖上一篇博客简单地分析了下依赖注入。但是对于依赖注入的很多细节,都没有深入的分析。这一篇博客会继续分析spring的依赖注入。这篇博客会解决分析getBean缓存时候遗留下来的循环依赖问题。循环依赖分析首先明确下,只有单例情况下,spring才会试着去解决循环依赖问题,多例是不会去解决循环依赖的。这个也好理解,如果是多例的话,比如a -> b 并且 b -> a 那么,当A a=new A(); 之后要注入b,b却是多例的,那么究竟该注入哪个B是不确定的。如下图:接下来我们分析,为啥会有循环依赖的问题。先来分析没有循环依赖的问题public static class A{ private B b; //省略get和set方法}public static class B{ }这个时
-
Spring--依赖注入 or 方法注入 ?依赖注入 我们在 [Spring — 循环依赖]中谈到 Spring 的两种依赖注入方式 构造器注入 属性注入(setter注入也归属于此) @Service public class HelloService { /** * 属性注入 */ @Autowired private BeanFactory beanFactory; /** * 构造器注入 */ public HelloService(ApplicationContext applicationContext) { } /** * 属性注入 * */ @Autowired public void setEnvironment(Environment environment) { System.out.println(""); } } 关于构造
-
Java Spring各种依赖注入注解的区别原文链接Spring对于Bean的依赖注入,支持多种注解方式:@Resource javax.annotation JSR250 (Common Annotations for Java) @Inject javax.inject JSR330 (Dependency Injection for Java) @Autowired org.springframework.bean.factory Spring直观上看起来,@Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring对这些注解也进行了支持。但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,发现一些有意思的特性。区别总结如下:一、@Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean是不会抛异常的。@Inject和@Resource没有提供对应的配置,所以必须找到否则会抛异常。二、 @Autowired和@Inject基本是一样的,因为两者都是使用Auto
-
Spring IoC是如何进行依赖注入的依赖注入(DI) DI(Dependency Injection),Spring IoC 不是一种技术,而是一种思想,通过这种思想,能够指导我们设计出松耦合的程序代码。而Spring IoC这个思想的作用体现在两个方面,一是如何将Bean装配到容器中去以及如何从容器中获取Bean,二是如何解决Bean之间的依赖关系,换句话说,就是如果由IoC容器来管理依赖关系,当一个Bean需要依赖另外一个Bean时,IoC容器如何实现这样的依赖关系。 解决Spring中Bean之间的依赖的实现方式,在Spring的概念中就被称之为依赖注入(Dependency
spring依赖注入注解相关课程
-
使用Google Guice实现依赖注入 本课程将带领大家通过Google Guice来系统的学习DI思想中的绑定,注入,生命周期,aop等方面的技巧。并示范Guice和Spring Boot如何协作。对于熟悉Spring的同学,学完本课后可以了解两者异同,加深对DI和Spring的理解。不只是为了单纯教授Gucie的用法,而是以Guice为媒介,希望使同学们在编程能力上能有所提高。 双十一双重好礼相送: 第一重:课程加量不加价; 第二重:小伙伴们可以凭借好评召唤幸运之神;将从评价用户中抽取三名幸运之星,赠送价值:499美元折合人民币约:3500RMB,请看图二; 【抽奖结果将在16-20号之间通过评价回复公布】活动详情传送门:https://coding.imooc.com/class/evaluation/180.html#Anchor
讲师:ccmouse 高级 9894人正在学习
-
Maven项目依赖管理 本套课程主要学习Maven的使用方式,从理念到实践、基础到应用,深入浅出的讲解配合贯穿全程的练习,让你深入掌握基于Maven管理Java项目的方式
讲师:大牧莫邪 入门 12270人正在学习
spring依赖注入注解相关教程
- 2. 依赖注入案例 2.1概念介绍知识回顾对于依赖注入,我们在第一章第一节已经介绍过,我们回顾一下概念解释上面是我们之前对于依赖注入的一个通俗解释。那么这里再着重强调一下 IOC 控制反转与 DI 依赖注入的关系:IOC 控制反转是将对象实例化的动作交由了 Spring 框架, 它的作用是降低了程序的耦合,不需要我们手动的创建对象,但是程序的耦合性还是存在。对象中肯定会有一些其余对象的引用,那么这种引用就称呼为对象的依赖,而 DI 依赖注入其实 是 IOC 设计思想的一种表现形式。对于 这种属性依赖,我们无需手动赋予,也是讲赋值的动作交给 Spring ,那么这种操作就是 依赖注入。依赖注入方式:第一种方式是通过 xml 配置的方式实现;第二种方式是在属性或者方法上使用注解的方式实现。那么,本章节先带大家体验下 xml 方式实现依赖注入。2.2 工程实现:搭建动作介绍创建一个 maven 工程导入Spring 使用的依赖编写业务层的 Service 和持久层的 Dao java 类编写 Spring 的配置文件创建工程 导入依赖 省略可以参考之前创建过的IOC工程java 代码创建 Servcie 的接口和接口的实现类,代码如下://接口代码public interface UserService { public void deleteById(Integer id);}//实现类代码public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void deleteById(Integer id) { System.out.println("删除的方法执行"); }}UserDao 接口和实现类代码://dao接口代码public interface UserDao {}//dao实现类代码public class UserDaoImpl implements UserDao {}代码解释: dao的接口和实现类中并没有方法,只是为了测试 作为service中的属性依赖,可以实现由 Spring 完成动态注入。重点来了:spring 的核心配置文件:配置解释:在上面的配置文件中:bean 标签是描述一个被实例化的类 而 property 则表示一类中的属性property 标签中的属性 name 一般我们写成类中的属性名称, 实际上,起决定作用的并不是属性名,下面示例再展示ref 表示当前的属性 是一个引用对象,而引用的是谁呢? ref 中的值 必须是在容器中已经实例化的一个引用对象的唯一标识。value 当前的属性可以直接赋值,所以通过 value 中,填写要赋予的数值即可测试结果代码解释可以看到 我们得到了 service 中的类属性 Userdao 的实例,并且也 得到了 字符串属性 userName的值 zs2.3 property注入属性的解释刚刚我们在上面的示例中 展示了xml依赖属性的注入,也是比较好理解。这里我们强调一下使用的注意事项:如果是 property 属性标签实现属性注入,那么类中必须由配置在 property 标签中 name 属性的 set 方法下面我们测试一下set方法的改变:先讲 service 中 dao 的 set 方法改造如下:public void setDao(UserDao userDao) { System.out.println("执行了set方法 给dao属性赋值"); this.userDao = userDao;}这时候代码中的set方法变成了 setDao 配置文件不变,依然是<property name="userDao" ref="userDao"></property>我们看看会产生什么问题Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bean class [com.wyan.service.UserServiceImpl]: Bean property 'userDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:247) at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1646)可以看到异常的堆栈信息 无效的 userDao 属性, userDao 不可以 或者 没有有效的 setter 方法提供。更改xml文件中的 property 标签的 name 属性 为 dao<property name="dao" ref="userDao"></property>测试结果如下:所以我们说 property 中的 name 属性不一定要跟 Java类中的属性名保持一致 而是必须跟 setter 方法的名称一致
- 3.1 EnableHystrix 注解详解 @EnableHystrix 注解是在 Spring Cloud 框架中使用 Hystrix 的基础必须注解,即如果想要在 Spring Cloud 框架中使用 Hystrix ,就必须要先声明 @EnableHystrix 注解,来告诉 Spring Cloud 框架,你要在其中使用 Hystrix 了。EnableHystrix 注解是作用在类上的注解,该注解没有任何参数,可以理解为,只是一个在 Spring Cloud 框架中来开启或关闭 Hystrix 的开关,具体用法我们看以下代码。@EnableHystrixpublic class DemoApplication { // 现在,同学们不需要理解main方法,重点看所使用的注解即可 public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}代码解释:第 1 行,我们将 @EnableHystrix 注解放到了 Spring Boot 项目的启动类上,这就表示,我们开启了 Hystrix ,即我们可以在项目中使用 Hystrix 了。Tips: 在 Spring Boot 项目中,如果想使用 Hystrix ,就一定先要在项目的启动类上,添加上述注解,否则,即使将 Hystrix 的依赖引入到了项目中,也无法使用 Hystrix 及任何功能特性。
- 2.4 @Resources 注解 此注解的作用是指定依赖按照 id 注入,还是按照类型注入。当只使用注解,但是不指定注入方式的时候,默认按照 id 注入,找不到时再按照类型注入。语法如下:@Resource //默认按照 id 为 userDao的bean实例注入 @Resource(name="userDao") //按照 id 为 userDao的bean实例注入 @Resource(type="UserDao") //按照 类型 为 UserDao的bean实例注入 这里就只做个语法的介绍,注解的使用大同小异,大家按照上方步骤自行测试即可。
- 2.2 @Autowired 注解 1. 为了测试效果,我们创建 Service 和 Dao 两个类, Dao 作为 Service 的依赖。代码如下://service实现类的代码@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public void saveUser() { System.out.println("执行service中的保存逻辑"); }}//dao实现类的代码@Repositorypublic class UserDaoImpl implements UserDao { public void saveUser() { System.out.println("执行dao的保存方法"); }}代码解释:上面代码可以看到,两个类的实例化方式都是通过注解注入到容器, 并且在 service 实现类中的 userDao 属性上面加了注解 @Autowired。我们首先测试下:能否通过这个注解,实现依赖注入,另外再测试下它是否是按照类型注入。2. 配置文件的内容为注解实现 IoC。配置文件解释: 注解实现 IoC 的章节说过,需要通过组件扫描来实例化容器。3. 编写测试代码public class SpringAnTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserService userService = context.getBean(UserService.class); userService.saveUser(); }}测试结果:结果解释可以看到 service 中的代码执行,并且通过 dao 的示例调用的方法也执行了,那么说明 @Autowired 注解实现了属性 userDao 的注入。当然这种操作是小儿科,没有一个同学觉得他有什么。 我们验证下它的特点:set 方法我们是省略了,那么它是否按照类型注入的呢?如果我们的实现类中有多个 userDao 接口的实现类呢,又该如何呢?4. 添加 UserDaoImpl2 一样实现 userDao 的接口,代码如下:@Repositorypublic class UserDaoImpl1 implements UserDao { public void saveUser() { System.out.println("执行dao1的保存方法"); }}测试结果结果解释:可以看到上面控制台打印的异常堆栈信息,清楚的提示错误原因,没有指定的 bean 实例 UserDao 类型的,期待单个 bean 匹配,但是找到了两个。一个是 userDaoImpl 一个是 userDaoImpl1。看到这可以证明: @Autowired 注解是按照类型注入,如果匹配的类型多了就会报错。疑问导出:难道使用了 Spring 框架以后,我们的接口只能有一个实现类吗? 当然不可能,毕竟我们看 Spring 的源码的时候 已经看到了,很多的接口对应一大堆的实现类。那么,针对这种多个接口实例的情况,怎么解决的呢?继续我们注解的学习。
- 2.2 引入项目依赖 我们引入 Web 项目依赖与 Redis 依赖。实例: <!-- Web 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Redis 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 4.1 引入依赖项 为监控服务端项目引入邮件依赖。实例: <!-- 邮件依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
spring依赖注入注解相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议