spring框架的applicationContext.xml有一点不明白

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring框架的applicationContext.xml有一点不明白相关的知识,希望对你有一定的参考价值。

最近在学SSH框架,简单的弄了个Struts2+spring的工程,在配置applicationContext.xml时出现问题

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd ">

<bean id="financialService" class="service.FinancialService">
</bean>
<bean id="financialAction" class="action.FinancialAction">
<property name="financialService" ref="financialService" />
</bean>

</beans>

Action中声明的service
private IFinancialService financialService;

我认为注入的流程是根据ref="financialService" 找到id="financialService" 的这个service,也就是class="service.FinancialService",
然后注入到class="action.FinancialAction"这个action的private IFinancialService financialService;中

但是实际配置的时候如果ref="financialService" 、id="financialService"这两个的首字母配制成大写的,
TOMCAT启动时不报错,但是调用financialService中的方法时会报空指针,也就是注入失败了,
为什么ref="financialService" 、id="financialService"这两个不能配置成大写呢?这两个仅仅是个标识ID,还和其他的文件有关联呢?

参考技术A 首先,我纠正一下你对spring依赖注入的理解! spring bean 获得依赖的属性值并不是通过属性名获得,而是通过属性对应的get和set方法来完成。 就拿你的代码作个例子:
FinancialAction 获得依赖的 IFinancialService, 不是通过financialService这个属性,而是通过IFinancialService中的getFinancialService()方法,你可以测试下,如果没有get/set方法,无论你怎么配,FinancialAction都找不到IFinancialService,会报异常。
如果明白了上面道理,你就会知道有些spring版本获得依赖对象的工作原理:
1. 首先获得 对应的getXYZ方法;
2. 截取getXYZ,得到XYZ,然后将第一个字母置为小写,变成xYZ;
3. 根据xYZ去spring容器里找依赖的bean

如果还不明白可以留言追问

非常感谢,通过get、set方法这个我是知道了,为了避免一大片代码我就没往上贴。
ref和id这两个,我认为是没有和其他文件有对应关系的,只是ref指向一个id,id可以随便叫,但是似乎不是这个样子,我想知道ref和id和什么其他的文件有关联。

追答

真的没有关联! 我确定

追问



改成这样提示空指针

追答

你在FinancialAction中定义一个getAaa()方法,然后返回FinancialService对象,就不会报空指针异常! 你要明白 id不仅仅是一个标识那么简单,那是与你定义的对象引用的get方法有关联的

本回答被提问者和网友采纳
参考技术B 我也新手...
首先,是根据ref找id
然后...TOMCAT启动时为什么会报错?如果你觉得要报错的话至少也要创建spring 容器的时候才报错吧.tomcat启动时不会报错呀.因为什么都没做.所以容器没有创建.容器没有创建,bean就没有实例化呀...

另外后面有一点没看懂...private IFinancialService financialService;中IFinancialService 是什么?
IFinancialService 是接口?FinancialService是继承的类?ref和id写什么都无所谓的,只要能对应就行..

Spring 的历史

Spring 的历史

本文主要去介绍spring 的历史和每个版本发布的不同的功能。

0.9

Spring的第一次出现在2020年的“Expert One-on-One J2EE Design and Developmen”上。

这次带来的有

  • JavaBeans 配置管理
  • JDBC抽象层
  • MVC框架
  • 事务
  • AOP

更多信息看 spring-0.9

1.0

这个版本在2004年3月24日发布

  • IOC
  • AOP 做了升级
  • application context 引入
  • 更通用的事务管理
  • support for source-level metadata 比如transaction注解
  • 通用的DAO支持
  • JDBC抽象的简化
  • hibernate支持,SessionFactory和事务级别的 ThreadLocal Sessions
  • 支持iBATIS SQL Maps 1.3/2.0,并且集成到spring的事务级别的管理
  • mail sender的抽象,
    ...

更多请看 spring-1.0

2.X

  • IOC
    • 更简单的XML配置
    • 新的bean scope
    • 可拓展的XML
  • AOP
    • 更简单的XML配置
    • 支持 @AspectJ 切片
  • The Middle Tier (中间层)
    • 在XML中声明transactions更简单
    • JPA spring 2.0 嵌入了JPA的抽象层
    • JDBC
      • 引入了几个新的class NamedParameterJdbcTemplate,SimpleJdbcTemplate
  • web层(spring MVC)
    • form 标签库(JSP tag lib 集成)
  • 其他
    • 动态语言支持(Groovy, JRuby, BeanShell)
    • Task scheduling
    • Java 5的支持

更多请看 Spring-2.X

3.X

  • 基于Java 5
  • Spring 的模块都单独分离出各自的jar包
  • Spring 表达式
  • IOC enhance
  • JavaConfig的元注解集成
  • 通用的类型转化和字段格式化
  • Object to XML mapping functionality (OXM) moved from Spring Web Services project
  • 全面的 REST 支持
  • @MVC additions
  • 声明式模型验证(Declarative model validation)
  • Early support for Java EE 6
  • Embedded database support(HSQL, H2, and Derby)

更多请看Spring-3.0

4.X

  • get start对新人友好
  • 移除deprecated包和方法
  • java 8
  • java EE 6和7
  • Groovy bean definition DSL
  • Core Container的提升
  • @RestController @ReseponseBody
  • AsyncRestTemplate class的添加,支持non-blocking 异步
  • spring-websocket 模块的引入,支持websocket
  • spring-messaging 模块 支持STOMP
  • 测试提升
    • spring-test 模块包含几乎所有的新的注解,(@ContextConfiguration, @WebAppConfiguration,@ContextHierarchy, @ActiveProfiles

更多请看spring-4.0

5.X

目前版本是5.3
5.X正在开发中,具体可看what‘s new in spring 5.x

结束

接下来准备看看spring 0.9的源码



以上是关于spring框架的applicationContext.xml有一点不明白的主要内容,如果未能解决你的问题,请参考以下文章

Spring4学习笔记2-配置Bean

ContextLoader和ContextLoaderListener

ContextLoader和ContextLoaderListener

面试阿里,字节,美团必看的Spring的Bean管理详解

面试阿里,字节,美团必看的Spring的Bean管理详解

Spring源码从开始到放弃