spring中注入方式
URL:https://blog.csdn.net/d124939312/article/details/79022984
注入简介
Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤,类似于工厂模式一样,通过一个工厂制造出这个对象,如果遇到修改,只需要改一处就行了。实现spring注入一般有两种方法,配置文件,或者用注解。各有不同的作用。
注意:本文中涉及到所以例子均默认加入了spring的包,如果没有加入spring包可以自己百度一下用maven或者手动下载spring的依赖包(这里就不给博客了,还是应该自己动动手吧)
配置注入:
不重复造轮子,这里已经说明得很清楚了,介绍了两种方式,set注入和构造注入,并且都很详细。至于这篇文中提及到的第三种:接口注入,本人小白观点,应该用interface来注入,在用mybatis框架时一般会接触到,注入这里本人也不介绍这个了,因为涉及到mybatis另一个框架,比较复杂。
PS:这位作者写的spring系列文章的确可以参考一下,本人也从中获益良多。
http://blog.csdn.net/lishuangzhe7047/article/details/20740835
注解注入:
自动装配
在了解注解注入之前,需要先了解一下自动装配这个概念,这篇博客也说得比较详细,可以先参考这个知道一些概念,由于这篇博客没有给出很详细的例子,所以这里本人会给个例子。
http://blog.csdn.net/lishuangzhe7047/article/details/20742427
首先介绍一下文件结构,Main主要来调试运行,Bean其中一个对象,Test,Bean所依赖的一个对象(也就是Bean成员里有Test对象),如图:
Main.class
Bean.class
Test.class
这里是配置文件
从这里可以看出,在bean那里有一个autowrite,这个字段就是用来自动装配的。可以看见在<property>这个标签中我没有写test的引用,这就是自动装配,可以根据名字(byName),也可以根据类型(byType)。所以这里的输出如下
如果这里我去掉了autowirte这个字段,由于我也没有在<property>里面引用test,所以这里的test会是空,并且会报错,因为Bean里面的test没有被初始化,所以test里面的getN调用不了,会NullPointer,如下图所示。
这里,基于去掉autowrite的基础上,我加一个<property>的test引用,这样又变成了手动装配了,就和上面给的第一篇博客的做法一样了。配置文件如下
所以其实自动装配其实就是类A中有对类B的依赖关系(即A类的成员中B类的成员,记得这概念啊),然后可以通过自动注解初始化B类(但还是需要在配置文件中写B类的<bean>标签的)
注解注入
了解了自动装配,就可以了解一下注解注入,因为就是基于自动装配这一概念的,不同的是注解注入不用在配置文件中配置这么多,只需要配置一点点就可以了,剩下的全部用注解来实现。
还是刚刚那个例子,把配置文件改一下,去掉那些<bean>标签,加一个这个标签
其中base-package是自己的包名,如果有多个包名可以用分号隔开(分号在引号中)
然后再在目标类上面增加一些注解,如图
Bean.class
仅仅在类上面加了个注解,这里的注解其实也可以写@Controller或者@Service,这些个注释从注入效果来说没有什么区别,只是一些逻辑的不同,可以理解为一个变量可以这样声明int number,也可以这样声明int n,只是名字不同而已。然后在Test那个地方加了一个@Resource,其实也可以写@Autowirte,不过官方貌似比较推荐些@Resource,其实两个作用也是一样的。这里的@Resource就可以理解为是配置文件中autowirte字段,这里的@Repository可以理解为配置文件里面的<bean>标签。
Test.class
Main.class不变
然后这样运行一下,如图
发现Bean中的String 对象是null,int值是0,而test的int 也是0。这里其实就是没有给这些字段初始化。但是Bean对象和Test是初始化了的(要追究到jvm的话就是Bean和Test都申请了一块内存)。这里也可以理解为调用了Bean和Test的默认构造函数,以为默认构造函数是空的,所以就是什么都没有初始化。这里也可以自己重写默认构造函数,例如把Test.class里面的默认构造函数那段注释去掉,然后运行结果如下:
这就是注解注入
配置注入VS注解注入
其实可以看出来,这两种的本质其实就是调用了构造函数,不过配置注入中的set注入是在调用构造函数后从配置文件里面读值然后set进去,构造注入是选择了特定的构造函数进行构造。注解注入就是调用了默认构造函数。如果要在注解注入中初始化对象成员中的值(例如本例中Bean的String 对象的值),那就需要在默认构造函数中进行初始化。
选择配置注入的好处
配置注入其实和工厂模式差不多,但选择配置注入的好处在于可以把值和代码分开,方便管理,可以在配置文件中赋值
选择注解注入的好处
虽然注解注入又把注解和代码混在一起了,但是也可以方便把配置和类对应起来,而且配置比较简单,写个注解就行了。但是如果你要用注解配置初始化值,就只能在默认构造函数中写。
所以一般常用的是,如果需要值的注入,一般用配置注入,例如数据库连接类,就也可以在那里初始化用户名和密码;如果是无具体值的类,例如只用方法的类,像那些controller和那些service,虽然里面有一些对象,但这些对象不需要给什么值,只要new一个对象就行了,这种一般就用注解注入。
--------------------- 本文来自 蜗牛-d124939312 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/d124939312/article/details/79022984?utm_source=copy
spring中注入方式相关推荐
- Spring 依赖注入方式详解
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...
- Spring的注入方式详解
[html] view plaincopy Spring的注入方式详解 Spring有三个注入方式,type1,type2,type3 type1 接口依赖 type2 setter/getter ...
- Spring bean注入方式
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5619525.html Spring bean提供了3中注入方式:属 ...
- spring的注入方式
下面展示spring的注入方式,主要是: 两个接口: Axe.java: package com.jim.service; public interface Axe { public String c ...
- 最全的 Spring 依赖注入方式,你都会了吗?
欢迎关注方志朋的博客,回复"666"获面试宝典 前言 Spring 正如其名字,给开发者带来了春天,Spring 是为解决企业级应用开发的复杂性而设计的一款框架,其设计理念就是:简 ...
- Spring依赖注入方式
一.依赖注入(DI)简介 依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数.工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性.因此,容器的工作就 ...
- java bean spring_Java+Spring+Bean+注入方式
1.首先准备共享文件 调用方法Client端Client.java: import org.springframework.context.support.ClassPathXmlApplicatio ...
- Spring 中注入什么意思?
当你需要写某模块代码时,如果正常需要new其他的类,利用注入,直接用注解,就可以用对象了,如果不注入,那么对应的类是没办法用的,你的这个模块就无法调用它. spring通过"控制反转&quo ...
- spring 内部类注入方式
一个DAO中既要继承HibernateDaoSupport也要继承SqlMapClientDaoSupport,即:hibernate和ibatis同时使用.内部类可以解决多继承的问题,但是如何注入内 ...
最新文章
- 骚操作 !用 Python 偷偷抓取女朋友的行踪(女朋友在哪里)
- Mybatis一级缓存、二级缓存
- ubuntu21.04下终端路径显示优化
- 最新综述:对话式检索数据集汇总
- memcache的深度解析(转)
- Apache TomEE(和Tomcat)的自签名证书
- add_argument函数action参数的store_true==》在运行程序添加参数时直接输入变量名,可以省略对应的默认值True或者False
- 史上最全的php面试题-带有答案,史上最全的PHP面试题-带有答案
- SaaS架构设计之如何转化成SaaS多租户模式
- 计算机网络自顶向下方法 【第一章 计算机网络及因特网】
- 四维图新地图坐标_移动端地图技术分享
- VirtualBox实现文件与主机复制粘贴
- 关于Employee 类的使用
- 使用讯飞语音识别的空指针错误
- LVS负载均衡群集——NAT地址转换
- mysql判断题题库_MySQL数据库考试试题及答案
- im即时通讯消息id的设计
- android debug set screen rotation
- live555服务器性能,使用Live555 HTTP容量作为信号服务器
- 软工系列之--数据流图(DFD图)
热门文章
- Javascript核心技术的基础语法
- 《聪明的投资者》书中的精髓:普通投资者耍小聪明,用美好的愿望进行交易,结果往往持续亏损,聪明的投资者用完整的系统保护财富,获得持续收益。
- gitlab访问错误Whoops, GitLab is taking too much time to respond搞定
- 手机端 html 语音输入,移动端HTML5页面开发备忘录
- Numpy(3/3):进阶知识
- java十六进制字符串高低位转换
- Java使用Graphics2D画波浪线的艰辛之路
- 《贫穷不是正义,懦弱亦非善良-雾满拦江》
- java泛型类的构造函数_java泛型,泛型类详解
- Ubuntu UFW 防火墙配置