- 浏览: 1133422 次
文章分类
最新评论
-
560130911:
100w,你的代码也不行吧!数组不能定义太大
POJ 1207 HDOJ/HDU 1032 3n+1数链问题 绝对不水的解法 -
revice:
how did you solve this problem? ...
ffmpeg ffmpeg 音频采集发送命令,以及播放的结果-----错误 -
shirne:
博主是用ubuntu吗
javascript 杂谈之哪种写法你更喜欢? -
mzc200803:
加油,相信你明年会找份好工作的。
实习改变了我什么 -
该用户名已经存在:
java类的实例化探究
spring 学习笔记
**
* 阅前说明:
* 此文件为笔者在学习Spring时所写的一些笔记<br>
* 希望能抛砖引玉来促进大家以各种方式交流学习心得<br>
* 如有转载,为了尊重笔者的劳动成果,请保留此段说明<br>
* @author 贺小佼 HeXiaojiao<br>
* Email ld_hxj1@yahoo.com.cn <br>
* QQ 88137099<br>
* Time 2008-04-14 16:43:43 <br>
* Blog http://blog.csdn.net/hexiaojiao
*/
Day-01
问题提出:
框架的主要优势是什么?
请简要描述Spring?
Spring框架分为哪几个模块,请详述?
Spring有哪些注入方式,请详细描述?
1.在Setter注入方式中,在beans包下的ProductBean中只加入一个带参数的构造
方法会如何?
2.在config.xml中少加一property项会如何?
3.Spring中有哪些集合注入,如何注入?
4.问:如何设置单例模式?有什么作用和特殊效果?
5.问:什么叫混合注入模式,请举例说明?
6.问: Spring中如何进行类型数据的设置
7.问:Spring支不支持数据类型自动转换?构造器复杂情况有哪些?
8.问:如果为嵌套属性(其属性为一个类)时如果配置?(Bean的引用如果配置)
9.问:Bean初始化方案有哪几种,请详述?
10.问:在bean类中(1)初始化接口方案、(2)构造方法与(3)初始化方法方案中各
方法的执行顺序如何?
//=======================================================
问题解决:
//-------------------------------------------------------------------
----------
框架的主要优势是什么?
请简要描述Spring?
Spring框架分为哪几个模块,请详述?
答:Spring框架可分为七个模块,分别如下:
1.核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组
件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)
模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2.Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供
上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际
化、校验和调度功能。
3.Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的
编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的
任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供
了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性
事务管理集成到应用程序中。
4.Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该
结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了
错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)
。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
5.Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM
的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都
遵从 Spring 的通用事务和 DAO 异常层次结构。
6.Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,
为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta
Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对
象的工作。
7.Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC
实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术
,其中包括 JSP、Velocity、Tiles、iText 和 POI。
//-------------------------------------------------------------------
----------
Spring有哪些注入方式,请详细描述?
答: 通过注入方式,使程序解耦合
一。通过构造器(构造方法)注入
构造器注入操作步骤:
1.引入Spring架包,建包ioc.common 在这包下建立三个包
ioc.common.beans,ioc.common.config,ioc.common.logic
2.在beans包下建立UserBean类,代码如下:
3.在config包下建立config.xml文件,内容如下:
4.在logic包下建立Run.java,内容如下:
框架:有固定流程的代码集合,代码中的流程能被反复重用
备注:
1、如果构造器(方法)中没有写任何代码又会如何?
答:将会输出 null-null,Spring不关心构造器实现何种功能,只去调用执行;
2、如果没有这个构造器会如何?
答:将会使Spring找不到该构造器而产生异常
3、如果构造器中有多个参数,没有配置其中某个参数会如何?如何处理?
答:Spring将会产生找不到参数异常,处理方式:建立一个没有该参数的构造
器或写入参数
Related cause:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userBean' defined in file
[/home/tarena/corejava/JSP/SpringPrj/./src/ioc/common/config/config.xm
l]: Unsatisfied dependency expressed through constructor argument with
index 1 of type [java.lang.String]: Ambiguous constructor argument
types - did you specify the correct bean references as constructor
arguments?
Context:包含特定内容的环境
/////////////////////////////////////////////Constructor IOC END
二。 Set注入
1.在步骤一的基础上,在beans包下建立ProductBean类,代码如下:
2.在config.xml中加入如下内容:
3.在logic包下新建类RunConstructor代码如下
问题:
1.在Setter注入方式中,在beans包下的ProductBean中只加入一个带参
数的构造方法会如何?
答:将会产生异常Spring异常与JVM异常
Exception in thread "main"
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'productBean' defined in file
[/home/tarena/corejava/JSP/SpringPrj/./src/ioc/common/config/config.xm
l]:
Instantiation of bean failed; nested exception is
org.springframework.beans.BeanInstantiationException:
Could not instantiate bean class
[ioc.common.beans.ProductBean]:
No default constructor found; nested exception is
java.lang.NoSuchMethodException:
ioc.common.beans.ProductBean.<init>()
//JVM异常
Caused by: java.lang.NoSuchMethodException:
ioc.common.beans.ProductBean.<init>()
Tips:强烈建议有不带参数的构造器
2.在config.xml中少加一property项会如何?
答:正常运行,但少加的属性值为null;
3.Spring中有哪些集合注入,如何注入?
答: Spring中有List,Map,Properties,Set,数组(如 String [] ,使用
同List)等集合注入;
注入方法:
在配置文件中<property name="变量名">
或constructor-arg index="参数序号,从0开始取"加入相应配置参数
形如:
////////////// END Set注入 END
三、 混合注入
即构造器注入与Set注入方式混合使用
如问题 5.
Tips:如果同时在constractor-arg 和property标签中配置同一属性,
则Setter注入方式会覆盖构造器注入
//-----------------------------------------------------------
4.问:如何设置单例模式?有什么作用和特殊效果?
答:在config.xml中设置<bean id="userBean"
class="bean_manager.beans.User" singleton="true">
其中singleton="true",设定该bean为单例模式;
作用:调用该类的多个对象时只在第一次实例化
特殊效果: 调用时第一次创建对象并赋值,对象还在内存中存活,
在第二次或之后创建对象后不用赋值也能调用前面赋予的属性 值。
//-------------------------------------------------------------------
----------
5.问:什么叫混合注入模式,请举例说明?
答:混合注入模式如:
<constructor-arg index="0">
<value>Janet </value>
</constructor-arg>
<property name="userPassword">
<null />
</property>
这在构造器中设置用户名,而在Set注入中设置密码
//-------------------------------------------------------------------
----------
6.问: Spring中如何进行类型数据的设置
答:在配置文件config.xml中进行设置,在value标签中加入属性type="类型"
<property name="brithday">
<value type=”int”>500</value>
</property>
//-------------------------------------------------------------------
----------
7.问:Spring支不支持数据类型自动转换?构造器复杂情况有哪些?
答:支持;如果构造器中参数个数与设置个数相等则调用String参数的构造器,
否则自动转换类型再进行调用
如果类型转换失败,则会输出相应出错信息。
//-------------------------------------------------------------------
----------
8.问:如果为嵌套属性(其属性为一个类)时如果配置?(Bean的引用如果配置)
答:配置属性形如:
//-------------------------------------------------------------------
----------
9.问:Bean初始化方案有哪几种,请详述?
答:有初始化接口方案和初始化方法方案;
方案一:初始化接口方案如下:
config.xml的配置没有任何特殊的地方。如下:
运行调用代码如下 init.logic.RunLogic.java
//输出结果为
//++++++++++++1
//Google
方案二:初始化方法方案步骤如下:
1.在java Bean中加入初始化方法,形如:
2.在配置文件./src/init/config/config.xml中写入如下内容:
3.在调用类执行的方法中写入如下代码:
//得输出结果为:
//*******************2
//BaiDu
//-------------------------------------------------------------------
----------
10.问:在bean类中(1)初始化接口方案、(2)构造方法与(3)初始化方法方案中
各方法的执行顺序如何?
答:执行顺序:为(2)==>(1)==>(3);
如在UserBean中加入:
//结果为:
//#######################0
//++++++++++++1
//*******************2
//BaiDu
//-------------------------------------------------------------------
----------
什么叫依赖注入,控制反转?
依赖配置文件,通过配置文件来赋值,而不是在程序中
当bean某属性为数组时(如String [])如何配置?
答:类似List
//-------------------------------------------------------------------
----------
//-------------------------------------------------------------------
----------
如何对Spring进行国际化?
1).建立资源文件
// src/international/config/resources_zh_CN.properties中内容如
下:
userinfo={0}\u662f\u4e00\u4e2a\u597d\u4eba
// src/international/config/resources_en.properties中内容如下:
userinfo={0} is a wonderful man
2).建立国际化配置文件 (src/international/config/config.xml)
3).编写测试类(international.logic.Run)
//---------------------------------------END OF 如何对Spring进行国际化
?
2.什么Spring事件模型请举例说明?
答: 事件模型包含三类角色,事件触发者,事件和事件接受者;
消息传递方向为,事件触发者==>事件==>事件接受者;
事件模型建立步骤:
1).定义事件
2).建立事件响应者
//-------------------------------------------------------------------
---
3).建立配置文件// src/event/config/config.xml
4).建立事件触发者类
//--------------------------------------2. END
3.问题:什么是AOP?
答:AOP全称是Aspect-Oriented Programming,中文翻译是面向方面的编程或
者面向切面的编程。
4.何谓Aspect?
答:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象。
事务管理是J2EE应用中一个关于横切关注点的很好的例子。
在SpringAOP中,切面可以使用通用类(基于模式的风格)
或者在普通类中以@Aspect注解(@Aspect风格)来实现。
即:当前关注的一个代码的流程,其中可能调用了多个类的多个方法。
5.请简述AOP的意义?
答:现在的系统往往强调减小模块之间的耦合度,AOP 技术就是用来帮助实现
这一目标的。
从某种角度上来讲“切面”是一个非常形象的描述,它好像在系统的功能之
上横切一刀,
要想让系统的功能继续,就必须先过了这个切面。
这些切面监视并拦截系统的行为,在某些(被指定的)行为执行之前或之后执行
一些附加的任务(比如记录日志).
而系统的功能流程(比如 Greeting)并不知道这些切面的存在,
更不依赖于这些切面,这样就降低了系统模块之间的耦合度。
* 阅前说明:
* 此文件为笔者在学习Spring时所写的一些笔记<br>
* 希望能抛砖引玉来促进大家以各种方式交流学习心得<br>
* 如有转载,为了尊重笔者的劳动成果,请保留此段说明<br>
* @author 贺小佼 HeXiaojiao<br>
* Email ld_hxj1@yahoo.com.cn <br>
* QQ 88137099<br>
* Time 2008-04-14 16:43:43 <br>
* Blog http://blog.csdn.net/hexiaojiao
*/
Day-01
问题提出:
框架的主要优势是什么?
请简要描述Spring?
Spring框架分为哪几个模块,请详述?
Spring有哪些注入方式,请详细描述?
1.在Setter注入方式中,在beans包下的ProductBean中只加入一个带参数的构造
方法会如何?
2.在config.xml中少加一property项会如何?
3.Spring中有哪些集合注入,如何注入?
4.问:如何设置单例模式?有什么作用和特殊效果?
5.问:什么叫混合注入模式,请举例说明?
6.问: Spring中如何进行类型数据的设置
7.问:Spring支不支持数据类型自动转换?构造器复杂情况有哪些?
8.问:如果为嵌套属性(其属性为一个类)时如果配置?(Bean的引用如果配置)
9.问:Bean初始化方案有哪几种,请详述?
10.问:在bean类中(1)初始化接口方案、(2)构造方法与(3)初始化方法方案中各
方法的执行顺序如何?
//=======================================================
问题解决:
//-------------------------------------------------------------------
----------
框架的主要优势是什么?
请简要描述Spring?
Spring框架分为哪几个模块,请详述?
答:Spring框架可分为七个模块,分别如下:
1.核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组
件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)
模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2.Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供
上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际
化、校验和调度功能。
3.Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的
编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的
任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供
了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性
事务管理集成到应用程序中。
4.Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该
结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了
错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)
。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
5.Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM
的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都
遵从 Spring 的通用事务和 DAO 异常层次结构。
6.Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,
为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta
Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对
象的工作。
7.Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC
实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术
,其中包括 JSP、Velocity、Tiles、iText 和 POI。
//-------------------------------------------------------------------
----------
Spring有哪些注入方式,请详细描述?
答: 通过注入方式,使程序解耦合
一。通过构造器(构造方法)注入
构造器注入操作步骤:
1.引入Spring架包,建包ioc.common 在这包下建立三个包
ioc.common.beans,ioc.common.config,ioc.common.logic
2.在beans包下建立UserBean类,代码如下:
- //UserBean.java
- packageioc.common.beans;
- publicclassUserBean{
- privateStringuserName;
- privateStringuserPassword;
- publicUserBean(){
- }
- publicUserBean(StringuserName,StringuserPassword){
- this.userName=userName;
- this.userPassword=userPassword;
- }
- publicStringgetUserName(){
- returnuserName;
- }
- publicvoidsetUserName(StringuserName){
- this.userName=userName;
- }
- publicStringgetUserPassword(){
- returnuserPassword;
- }
- publicvoidsetUserPassword(StringuserPassword){
- this.userPassword=userPassword;
- }
- @Override
- publicStringtoString(){
- returnuserName+"-"+userPassword;
- }
- }
3.在config包下建立config.xml文件,内容如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <beanid="userBean"class="ioc.common.beans.UserBean">
- <constructor-argindex="0">
- <value>Janet</value>
- </constructor-arg>
- <constructor-argindex="1">
- <value>88888888</value>
- </constructor-arg>
- </bean>
- </beans>
4.在logic包下建立Run.java,内容如下:
- packageioc.common.logic;
- importioc.common.beans.UserBean;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- publicclassRun{
- publicstaticvoidmain(String[]args){
- StringfileName="./src/ioc/common/config/config.xml";
- ApplicationContextac=newFileSystemXmlApplicationContext
- (fileName);
- //取得一个实例
- UserBeanuser=(UserBean)ac.getBean("userBean");
- System.out.println(user);
- }
- }
- //endofRun.java
框架:有固定流程的代码集合,代码中的流程能被反复重用
备注:
1、如果构造器(方法)中没有写任何代码又会如何?
答:将会输出 null-null,Spring不关心构造器实现何种功能,只去调用执行;
2、如果没有这个构造器会如何?
答:将会使Spring找不到该构造器而产生异常
- Exceptioninthread"main"
- org.springframework.beans.factory.BeanCreationException:
- Errorcreatingbeanwithname'userBean'definedinfile
- [/home/tarena/corejava/JSP/SpringPrj/./src/ioc/common/config/config.xm
- l]:
- 2constructorargumentsspecifiedbutnomatchingconstructor
- foundinbean'userBean'
- (hint:specifyindexand/ortypeargumentsforsimpleparameters
- toavoidtypeambiguities)
3、如果构造器中有多个参数,没有配置其中某个参数会如何?如何处理?
答:Spring将会产生找不到参数异常,处理方式:建立一个没有该参数的构造
器或写入参数
Related cause:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userBean' defined in file
[/home/tarena/corejava/JSP/SpringPrj/./src/ioc/common/config/config.xm
l]: Unsatisfied dependency expressed through constructor argument with
index 1 of type [java.lang.String]: Ambiguous constructor argument
types - did you specify the correct bean references as constructor
arguments?
Context:包含特定内容的环境
/////////////////////////////////////////////Constructor IOC END
二。 Set注入
1.在步骤一的基础上,在beans包下建立ProductBean类,代码如下:
- //ProductBean.java
- packageioc.common.beans;
- publicclassProductBean{
- privateStringproductName;
- privateStringproductDiscript;
- publicvoidsetProductName(StringproductName){
- this.productName=productName;
- }
- publicvoidsetProductDiscript(StringproductDiscript){
- this.productDiscript=productDiscript;
- }
- @Override
- publicStringtoString(){
- returnproductName+"-"+productDiscript;
- }
- }
2.在config.xml中加入如下内容:
- <beanid="productBean"class="ioc.common.beans.ProductBean">
- <propertyname="productName">
- <value>Motorolla</value>
- </property>
- <propertyname="productDiscript">
- <value>mebophoneproducter</value>
- </property>
- </bean>
3.在logic包下新建类RunConstructor代码如下
- //RunSetter.java
- packageioc.common.logic;
- importioc.common.beans.ProductBean;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- publicclassRunSetter{
- publicstaticvoidmain(String[]args){
- StringfileName="./src/ioc/common/config/config.xml";
- ApplicationContextac=newFileSystemXmlApplicationContext
- (fileName);
- ProductBeanproduct=(ProductBean)ac.getBean
- ("productBean");
- System.out.println(product);
- }
- }
问题:
1.在Setter注入方式中,在beans包下的ProductBean中只加入一个带参
数的构造方法会如何?
答:将会产生异常Spring异常与JVM异常
Exception in thread "main"
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'productBean' defined in file
[/home/tarena/corejava/JSP/SpringPrj/./src/ioc/common/config/config.xm
l]:
Instantiation of bean failed; nested exception is
org.springframework.beans.BeanInstantiationException:
Could not instantiate bean class
[ioc.common.beans.ProductBean]:
No default constructor found; nested exception is
java.lang.NoSuchMethodException:
ioc.common.beans.ProductBean.<init>()
//JVM异常
Caused by: java.lang.NoSuchMethodException:
ioc.common.beans.ProductBean.<init>()
Tips:强烈建议有不带参数的构造器
2.在config.xml中少加一property项会如何?
答:正常运行,但少加的属性值为null;
3.Spring中有哪些集合注入,如何注入?
答: Spring中有List,Map,Properties,Set,数组(如 String [] ,使用
同List)等集合注入;
注入方法:
在配置文件中<property name="变量名">
或constructor-arg index="参数序号,从0开始取"加入相应配置参数
形如:
- <list>
- <value>Eric</value>
- <value>Narci</value>
- </list>
- <map>
- <entrykey="HR">
- <value>人力资源部</value>
- </entry>
- <entrykey="MIS">
- <value>信息管理部</value>
- </entry>
- </map>
- <props>
- <propkey="GG">成俊杰</prop>
- <propkey="MM">伍欣</prop>
- </props>
- <set>
- <value>CoreJava</value>
- <value>JDBC</value>
- <value>AJAX</value>
- </set>
////////////// END Set注入 END
三、 混合注入
即构造器注入与Set注入方式混合使用
如问题 5.
Tips:如果同时在constractor-arg 和property标签中配置同一属性,
则Setter注入方式会覆盖构造器注入
//-----------------------------------------------------------
4.问:如何设置单例模式?有什么作用和特殊效果?
答:在config.xml中设置<bean id="userBean"
class="bean_manager.beans.User" singleton="true">
其中singleton="true",设定该bean为单例模式;
作用:调用该类的多个对象时只在第一次实例化
特殊效果: 调用时第一次创建对象并赋值,对象还在内存中存活,
在第二次或之后创建对象后不用赋值也能调用前面赋予的属性 值。
//-------------------------------------------------------------------
----------
5.问:什么叫混合注入模式,请举例说明?
答:混合注入模式如:
<constructor-arg index="0">
<value>Janet </value>
</constructor-arg>
<property name="userPassword">
<null />
</property>
这在构造器中设置用户名,而在Set注入中设置密码
//-------------------------------------------------------------------
----------
6.问: Spring中如何进行类型数据的设置
答:在配置文件config.xml中进行设置,在value标签中加入属性type="类型"
<property name="brithday">
<value type=”int”>500</value>
</property>
//-------------------------------------------------------------------
----------
7.问:Spring支不支持数据类型自动转换?构造器复杂情况有哪些?
答:支持;如果构造器中参数个数与设置个数相等则调用String参数的构造器,
否则自动转换类型再进行调用
如果类型转换失败,则会输出相应出错信息。
//-------------------------------------------------------------------
----------
8.问:如果为嵌套属性(其属性为一个类)时如果配置?(Bean的引用如果配置)
答:配置属性形如:
- <propertyname="product">
- <refbean="product"/><!--bean名为此配置文件中的另一个(引用类
- 的)bean中id属性值-->
- </property>
- <propertyname="brithday">
- <refbean="date"/>
- </property>
- <beanid="date"class="java.util.Date"></bean>
//-------------------------------------------------------------------
----------
9.问:Bean初始化方案有哪几种,请详述?
答:有初始化接口方案和初始化方法方案;
方案一:初始化接口方案如下:
- //Bean开发:
- packageinit.beans;
- publicclassUserimplementsInitializingBean{
- privateStringuserName;
- publicvoidafterPropertiesSet()throwsException{
- this.userName="Google";
- System.out.println("++++++++++++1");
- }
- publicStringgetUserName(){
- returnuserName;
- }
- publicvoidsetUserName(StringuserName){
- this.userName=userName;
- }
- }
config.xml的配置没有任何特殊的地方。如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <beanid="userBean"class="init.beans.UserBean">
- <propertyname="userName">
- <value>Eric</value>
- </property>
- </bean>
- </beans>
运行调用代码如下 init.logic.RunLogic.java
- packageinit.logic;
- importinit.beans.UserBean;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- publicclassRunLogic{
- publicstaticvoidmain(String[]args){
- StringfileName="./src/init/config/config.xml";
- ApplicationContextac=newFileSystemXmlApplicationContext
- (fileName);
- StringbeanName="userBean";
- Objectobj=ac.getBean(beanName);
- if(obj!=null){
- UserBeanuser=(UserBean)obj;
- System.out.println(user.getUserName());
- }
- }
- }
//输出结果为
//++++++++++++1
方案二:初始化方法方案步骤如下:
1.在java Bean中加入初始化方法,形如:
- //init.beans.UserBean
- publicStringinitUser(){
- this.userName="BaiDu";
- System.out.println("*******************2");
- returnthis.userName;
- }
2.在配置文件./src/init/config/config.xml中写入如下内容:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <beanid="userBean"class="init.beans.UserBean"
- init-method="initUser">
- <propertyname="userName">
- <value>Eric</value>
- </property>
- </bean>
- </beans>
3.在调用类执行的方法中写入如下代码:
- //init.logic.RunLogic
- packageinit.logic;
- importinit.beans.UserBean;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- publicclassRunLogic{
- publicstaticvoidmain(String[]args){
- StringfileName="./src/init/config/config.xml";
- ApplicationContextac=newFileSystemXmlApplicationContext
- (fileName);
- StringbeanName="userBean";
- Objectobj=ac.getBean(beanName);
- if(obj!=null){
- UserBeanuser=(UserBean)obj;
- System.out.println(user.getUserName());
- }
- }
- }
//得输出结果为:
//*******************2
//BaiDu
//-------------------------------------------------------------------
----------
10.问:在bean类中(1)初始化接口方案、(2)构造方法与(3)初始化方法方案中
各方法的执行顺序如何?
答:执行顺序:为(2)==>(1)==>(3);
如在UserBean中加入:
- publicUserBean(){
- System.out.println("#######################0");
- }
- publicStringinitUser(){
- this.userName="BaiDu";
- System.out.println("*******************2");
- returnthis.userName;
- }
- publicvoidafterPropertiesSet()throwsException{
- this.userName="Google";
- System.out.println("++++++++++++1");
- }
//结果为:
//#######################0
//++++++++++++1
//*******************2
//BaiDu
//-------------------------------------------------------------------
----------
什么叫依赖注入,控制反转?
依赖配置文件,通过配置文件来赋值,而不是在程序中
当bean某属性为数组时(如String [])如何配置?
答:类似List
- <propertyname="basenames">
- <list>
- <value>international.config.resources</value>
- <!--可写多个资源文件-->
- </list>
- </property>
//-------------------------------------------------------------------
----------
//-------------------------------------------------------------------
----------
如何对Spring进行国际化?
1).建立资源文件
// src/international/config/resources_zh_CN.properties中内容如
下:
引用
userinfo={0}\u662f\u4e00\u4e2a\u597d\u4eba
// src/international/config/resources_en.properties中内容如下:
userinfo={0} is a wonderful man
2).建立国际化配置文件 (src/international/config/config.xml)
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <beanid="messageSource"
- class="org.springframework.context.support.ResourceBundleMessageSource
- ">
- <!--
- id与class不能改动写死在Spring中类
- FileSystemXmlApplicationContext
- 的getMessage方法中了
- -->
- <propertyname="basenames">
- <list>
- <value>international.config.resources</value>
- <!--可放多套资源文件,其中basenames为String[]类型-->
- </list>
- </property>
- </bean>
- </beans>
3).编写测试类(international.logic.Run)
- packageinternational.logic;
- importjava.util.Locale;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- publicclassRun{
- publicstaticvoidmain(String[]args){
- StringsourceFile="src/international/config/config.xml";
- ApplicationContextact=new
- FileSystemXmlApplicationContext(sourceFile);
- Stringresolvable="userinfo";
- Object[]paramList={"Eric"};
- Stringmsg=act.getMessage(resolvable,paramList,
- Locale.getDefault());
- //如果为其他语言找不到其配置文件时,则会加载和操作系统语言一样
- 的资源文件
- //如果也不存在则会出现异常
- //加载顺序先加载指定语言资源
- //如果失败再尝试加载操作系统语言相应的资源文件
- //如果失败,再加载默认的资源文件
- //一旦找到符合的就不再找了
- //最后都找不到时抛出异常,不会加载此顺序外的资源文件
- System.out.println(msg);
- }
- }
//---------------------------------------END OF 如何对Spring进行国际化
?
2.什么Spring事件模型请举例说明?
答: 事件模型包含三类角色,事件触发者,事件和事件接受者;
消息传递方向为,事件触发者==>事件==>事件接受者;
事件模型建立步骤:
1).定义事件
- //event.events.WarnEvent
- packageevent.events;
- importorg.springframework.context.ApplicationEvent;
- publicclassWarnEventextendsApplicationEvent{
- privatestaticfinallongserialVersionUID=
- 3287507907413175457L;
- publicWarnEvent(Objectsource){
- super(source);
- }
- }
2).建立事件响应者
- //event.listeners.Receiver
- packageevent.listeners;
- importorg.springframework.context.ApplicationEvent;
- importorg.springframework.context.ApplicationListener;
- importevent.events.WarnEvent;
- publicclassReceiverimplementsApplicationListener{
- publicvoidonApplicationEvent(ApplicationEventevent){
- System.out.println("Receiver接收到事件@");
- if(true==eventinstanceofWarnEvent){
- //对各种事件的处理
- WarnEventwe=(WarnEvent)event;
- Stringmsg=(String)we.getSource();
- System.out.println("Receiver"+msg);
- }
- }
- }
//-------------------------------------------------------------------
---
- //event.listeners.JaneReceiver
- packageevent.listeners;
- importorg.springframework.context.ApplicationEvent;
- importorg.springframework.context.ApplicationListener;
- importevent.events.WarnEvent;
- publicclassJaneReceiverimplementsApplicationListener{
- publicvoidonApplicationEvent(ApplicationEventevent){
- System.out.println("JaneReceiver接收到事件@");
- if(true==eventinstanceofWarnEvent){
- //对各种事件的处理
- WarnEventwe=(WarnEvent)event;
- longtime=we.getTimestamp();
- System.out.println("time"+time);
- Stringmsg=(String)we.getSource();
- System.out.println("JaneReceiver"+msg);
- }
- }
- }
3).建立配置文件// src/event/config/config.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <beanid="receiver"class="event.listeners.Receiver"></bean>
- <beanid="janereceiver"
- class="event.listeners.JaneReceiver"></bean>
- </beans>
4).建立事件触发者类
- packageevent.sender;
- importorg.springframework.context.ApplicationContext;
- import
- org.springframework.context.support.FileSystemXmlApplicationContext;
- importevent.events.WarnEvent;
- publicclassRun{
- publicstaticvoidmain(String[]args){
- StringsourceFile="src/event/config/config.xml";
- ApplicationContextact=new
- FileSystemXmlApplicationContext(sourceFile);
- WarnEventevent=newWarnEvent("HaHa");
- act.publishEvent(event);
- }
- }
//--------------------------------------2. END
3.问题:什么是AOP?
答:AOP全称是Aspect-Oriented Programming,中文翻译是面向方面的编程或
者面向切面的编程。
4.何谓Aspect?
答:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象。
事务管理是J2EE应用中一个关于横切关注点的很好的例子。
在SpringAOP中,切面可以使用通用类(基于模式的风格)
或者在普通类中以@Aspect注解(@Aspect风格)来实现。
即:当前关注的一个代码的流程,其中可能调用了多个类的多个方法。
5.请简述AOP的意义?
答:现在的系统往往强调减小模块之间的耦合度,AOP 技术就是用来帮助实现
这一目标的。
从某种角度上来讲“切面”是一个非常形象的描述,它好像在系统的功能之
上横切一刀,
要想让系统的功能继续,就必须先过了这个切面。
这些切面监视并拦截系统的行为,在某些(被指定的)行为执行之前或之后执行
一些附加的任务(比如记录日志).
而系统的功能流程(比如 Greeting)并不知道这些切面的存在,
更不依赖于这些切面,这样就降低了系统模块之间的耦合度。
相关推荐
spring学习笔记
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
Spring学习笔记( spring视频笔记)
### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc
根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...
“Java Spring学习笔记”是一份宝贵的资源,专门为想要学习和掌握Java Spring框架的开发者而设计。这份学习笔记提供了详细而系统的教程和实践指南,帮助初学者快速入门,并带领已经有一定经验的开发者深入理解和应用...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...
"尚学堂Spring学习笔记" 本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在...
Spring学习笔记2涵盖了Spring框架的核心概念和重要特性,旨在帮助开发者深入理解并熟练掌握Spring的使用。 1. **依赖注入(Dependency Injection, DI)**:这是Spring最核心的设计原则,它允许对象之间的依赖关系在...
在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...
这份"Spring学习笔记"涵盖了Spring框架的基础到高级应用,对于想要深入理解并掌握Spring的开发者来说是一份宝贵的资料。 1. **Spring概述**:Spring是一个开源的Java平台,主要设计用于简化企业级应用开发。它提供...