-
SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册)--详细书签版
2013-02-06 11:52:198.8.13 返回当前用户会话的应用程序和主机 253 8.8.14 获取当前用户和登录名上下文 253 8.8.15 查看用户连接选项 254 8.9 IDENTITY和uniqueidentifier函数 255 8.9.1 返回最后一个标识值 255 8.9.2 返回... -
今天才知道,原来 Spring的 bean还可以这样装配!
2020-09-19 16:10:12比较官方的解释是 Spring Bean是事物处理组件类和实体类(POJO)对象的总称,是能够被实例化、能够被spring容器管理的java对象。可以把bean看做是一个组件,这个组件用来具体实现某个业务功能。总结性的讲,Bean就是...啥是Spring Bean
比较官方的解释是 Spring Bean是事物处理组件类和实体类(POJO)对象的总称,是能够被实例化、能够被spring容器管理的java对象。可以把bean看做是一个组件,这个组件用来具体实现某个业务功能。总结性的讲,Bean就是由IOC容器初始化、装配及管理的对象,除此之外,和程序中的其他对象没有区别。
怎么使用Bean呢
在spring中bean是由spring容器创建和管理的,各组件之间的依赖关系也是由spring容器管理的,这在很大程度上减少了开发者的工作量。但是你也不是什么都不需要做的,你要告诉spring要创建哪些bean并且如何将这些bean装配在一起。看个图吧:
Spring Bean 的装配
①基于xml配置装配
声明一个简单的bean,在xml中可以按照如下形式声明一个bean:
<bean id=”foo” class="com.test.Foo" > <property name=”fooPro” value=”proVal”> <property name=”otherObj” ref=”otherObj”> </bean>
这里声明了一个简单的Bean,创建Bean的类由class属性指定(需要全限定类名),id是Bean的唯一标识,如果没有指定id属性的值则取权限定类名作为id,com.test.Foo类的定义如下:
Public Class Foo{ private string fooPro; private OtherObj otherObj; public void setFooPro(string fooPro){ this.fooPro = fooPro; } public void setOtherObj (OtherObj otherObj){ this.otherObj = otherObj; } …}
<property>元素实现属性注入,即将“proVal”赋值给com.test.Foo的“fooPro”属性,这里注入的是一个常量值。如果该Bean依赖于另一个Bean,那么使用ref属性代替value属性将所依赖的Bean注入,ref属性的值指向的是依赖的Bean的id。为了让配置文件变得简洁,Spring提供了p-命名空间来替代property元素,作用是相同的,简洁配置如下:
<bean id=”foo” class="com.test.Foo" p:fooPro=”proVal” p:otherObj-ref=“otherObj” ></bean>
常量值属性的注入为:p:属性名=”属性值”,Bean属性的注入:p:属性名-ref=”引用的Bean的id”。以上使用的是setter方法注入,Spring还提供了一种构造器注入的方式,简单介绍一下(使用的较少,一般都是用setter注入的形式):
<bean id=”foo” class="com.test.Foo" > <constructor-arg value=”proVal”> <constructor-arg ref=”otherObj”> </bean>
属性值的注入是按构造函数中的参数顺序依次赋值的。
②基于Java代码装配
使用Java代码装配首先需要创建一个配置类(JavaConfig)
@Configuration public class FooConf{ @Bean public OtherObj otherObj(){ return new OtherObj(); }}
@Configuration表明该类是一个配置类,@Bean注解用于声明一个Bean,@Bean注解的方法通知Spring该方法会返回一个Bean并且会注册为Spring应用上下文的Bean。
③基于注解的装配(自动化装配)
Spring从两个角度实现自动化装配:
第一步:组件扫描(component scanning),Spring会自动发现应用上下文中所创建的bean。
第二不步:自动装配( autowiring),Spring自动满足bean之间的依赖。
创建能被扫描到的Bean:
@Component public class Foo(){ }
@Component注解表明该类是一个组件类,它将通知Spring为该类创建一个Bean。那么该如何让Spring去扫描@Component注解的类呢?有两种方式:
使用@ComponentScan注解启用组件扫描
@Configuration @ComponentScan public class FooConf{ }
如果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包,查找带有@Component注解的类,可以使用basePackages属性设置扫描的基础包。
使用xml启用组件扫描
在xml配置文件中添加<context:component-scan base-package=”要扫描的基础包” />,作用同@ComponentScan注解。
@Component注解能够让Foo类注入到Spring容器中,但是如果Foo类依赖于其他类怎么办呢?使用@AutoWried注解。
@Component public class Foo{ //成员变量使用@AutoWired @AutoWried private OtherObj otherObj; ……}@Componentpublic class Foo{ private OtherObj otherObj; //构造方法使用@AutoWired @AutoWried public Foo (OtherObj otherObj){ this.otherObj = otherObj; }}@Componentpublic class Foo{ private OtherObj otherObj; //Setter方法使用@AutoWired @AutoWried Public void setOtherObj (OtherObj otherObj){ this.otherObj = otherObj; }}
如上,@AutoWried注解能够用在构造器或者setter方法或者成员变量上,作用就是把Foo类依赖的Bean注入进来。
其实在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。
@Resource也可以把Foo类以来的Bean注入进来,但是@AutoWired默认是按类型装配,@Resource是按名字装配。当依赖Bean有多个实现类时,就可以使用@Resource注解装配指定的实现类(@Resource(name="otherObjImpl1")……)。
作者:加哇er
链接:https://juejin.im/post/5e814f076fb9a03c6422f576
来源:掘金
-
XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解
2008-12-05 08:39:07一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。 DTD文件也是一个ASCII的文本文件,后缀名为.dtd。例如:myfile.dtd。 为什么要用DTD文件呢?我的理解是它... -
软件工程-理论与实践(许家珆)习题答案
2011-01-12 00:49:42C) 包括程序和文档 D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具 B) 方法、工具和过程 C) 方法、对象和类 D) 过程、模型、方法 3. 包含风险分析的软件工程... -
软件工程教程
2012-07-06 23:10:29用例只描述参与者和系统在交互过程中做些什么,并不描述怎么做。 用例图 关联关系 用例图 泛化关系 用例图 泛化关系 用例图 用例图 用例图 用例用于什么情况? 不知道什么情况不用用例 如果没有用到用例,... -
asp.net知识库
2015-06-18 08:45:45利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:451.3.1 联机事务处理和决策支持系统数据库 6 1.3.2 开发、测试和产品数据库 7 1.4 培训和认证 7 1.4.1 培训 7 1.4.2 认证 8 1.4.3 Oracle DBA的资源和组织 10 1.4.4 Oracle示例 11 1.4.5 Oracle... -
Java程序员面试宝典pdf
2013-02-21 13:06:13面试题188 如果你完全不同意你上司的某个要求,你怎么处理 341 16.3 小结 342 第17章 智商类面试题( 教学视频:43分钟) 343 17.1 脑筋急转弯 343 面试题189 美国有多少辆汽车 343 面试题190 下水道的盖子为什么是... -
java 面试题 总结
2009-09-16 08:45:34对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session ... -
数据库概念的复习总结
2011-06-23 22:37:2633、游标怎么使用:游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。 必须使用游标的SQL语句... -
java面试宝典
2013-02-28 16:04:01抽象类是否可继承实体类(concrete class)? 12 41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请... -
千方百计笔试题大全
2011-11-30 21:58:33抽象类是否可继承实体类(concrete class)? 12 41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请... -
c#学习笔记.txt
2008-12-15 14:01:21try-catch 语句由一个 try 块和其后所跟的一个或多个 catch 子句(为不同的异常指定处理程序)构成。try-catch 语句采用下列形式之一: try try-block catch (exception-declaration-1) catch-block-1 catch ... -
本项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,11类规模约30万实体关系的知识图谱。 本项目将包括以下两部分的内容: 基于垂直网站数据的医药知识图谱...
-
java面试题典 java 面试题 经典
2010-06-18 13:42:3632. Java中的异常处理机制的简单原理和应用。 12 33. 垃圾回收的优点和原理。并考虑2种回收机制。 12 34. 你所知道的集合类都有哪些?主要方法? 13 35. 描述一下JVM加载class文件的原理机制? 13 36. char型变量中能... -
java基础题 很全面
2009-05-09 09:24:2439. Java中的异常处理机制的简单原理和应用。 11 40. 垃圾回收的优点和原理。并考虑2种回收机制。 11 41. 你所知道的集合类都有哪些?主要方法? 12 42. 描述一下JVM加载class文件的原理机制? 12 43. char型变量中能不... -
最新Java面试宝典pdf版
2011-08-31 11:29:2243、Java中的异常处理机制的简单原理和应用。 28 44、请写出你最常见到的5个runtime exception。 28 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出... -
Java面试宝典2010版
2011-06-27 09:48:2743、Java中的异常处理机制的简单原理和应用。 44、请写出你最常见到的5个runtime exception。 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?... -
java面试宝典2011整理有答案
2011-11-09 13:36:0643、Java中的异常处理机制的简单原理和应用。 28 44、请写出你最常见到的5个runtime exception。 28 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出... -
MAPGIS地质制图工具
2013-05-06 16:15:302)对于独立安装包:打开控制面板,进入添加/删除程序(Win7的为程序和功能)找到Section卸载项目,双击“Section卸载”或者右键菜单中的卸载。 FAQ: 1、 双击section.exe后出现 “无法启动此程序,因计算机丢失... -
arcgis工具
2012-10-22 22:37:31(对线要素进行标注时,如果标注在线上,标注和线会叠加显示,效果不理想,下面叫介绍一种可以在显示标注的地方把线断开的方法,这样效果会美观一些) 操作步骤: 1).把标注转成注记,保存在GDB中 2). 用... -
c++ 面试题 总结
2009-09-16 08:44:40同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual ,也能实现多态。 在子类的空间里,有父类的私有变量。私有变量不能直接访问。 ----------------------------------------------------------... -
fckedit编辑器
2013-11-10 14:28:32但是在控制台显示的中文内容还是乱码,但是没关系,我们没必要去看控制台下的中文 ----------------------------------------------------------------another FCKeditor2.4.2 Java版使用说明 下载地址以及基本... -
Java 面试宝典
2013-02-01 10:02:08一. Java 基础部分............................................................................................................43、Java 中的异常处理机制的简单原理和应用。 .....................................