spring中可以只用autowire="byName"或者"byType"来提供自动注入。但是大家有一点还需要注意,那就是它不支持基本数据类型(String,int,long等)的自动注入。例如
JAVA类:
-
publicclassTestBean{
-
privateStringname;
-
privateLongage;
-
privateStringfullName;
-
privateTestBean2testBean2;
-
publicvoidsetTestBean2(TestBean2testBean2){
-
this.testBean2=testBean2;
- }
-
publicTestBean2getTestBean2(){
-
returntestBean2;
- }
-
publicvoidsetFullName(StringfullName){
-
this.fullName=fullName;
- }
-
publicStringgetFullName(){
-
returnfullName;
- }
-
publicvoidsetAge(Longage){
-
this.age=age;
- }
-
publicLonggetAge(){
-
returnage;
- }
-
publicvoidsetName(Stringname){
-
this.name=name;
- }
-
publicStringgetName(){
-
returnname;
- }
- }
JAVA类2:
-
publicclassTestBean2{
-
publicStringgetString(){
-
return"testB";
- }
- }
配置文件:
-
<beansdefault-autowire="byName">
-
-
<beanid="testBean"class="TestBean">
-
<propertyname="fullName">
-
<value>fullName</value>
-
</property>
-
</bean>
-
<beanid="name"class="java.lang.String">
-
<constructor-arg>
-
<value>hell</value>
-
</constructor-arg>
-
</bean>
-
<beanid="age"class="java.lang.Long">
-
<constructor-arg>
-
<value>20</value>
-
</constructor-arg>
-
</bean>
-
<beanid="testBean2"class="TestBean2"/>
-
</beans>
测试类:
-
importorg.springframework.context.support.ClassPathXmlApplicationContext;
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
ClassPathXmlApplicationContextt=newClassPathXmlApplicationContext(
-
"test.xml");
-
TestBeanbean=(TestBean)t.getBean("testBean");
-
System.out.println("name:"+bean.getName()+"age:"+bean.getAge()
-
+"fullName:"+bean.getFullName()+"testBean2"
- +bean.getTestBean2().getString());
- }
- }
输出的结果是:
name:null age:null fullName :fullName testBean2:testB
spring源码中排除基本类型的代码(源码来自:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory类)在:
-
protectedString[]unsatisfiedNonSimpleProperties(AbstractBeanDefinitionmbd,BeanWrapperbw){
-
Setresult=newTreeSet();
- PropertyValuespvs=mbd.getPropertyValues();
- PropertyDescriptor[]pds=bw.getPropertyDescriptors();
-
for(inti=0;i<pds.length;i++){
-
if(pds[i].getWriteMethod()!=null&&!isExcludedFromDependencyCheck(pds[i])&&
- !pvs.contains(pds[i].getName())&&!BeanUtils.isSimpleProperty(pds[i].getPropertyType())){
- result.add(pds[i].getName());
- }
- }
-
returnStringUtils.toStringArray(result);
- }
请注意以上紫色部分。而这个
unsatisfiedNonSimpleProperties方法都是在自动注入时调用。所以基本类型不会被注入。
分享到:
相关推荐
在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4. ...
6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...
在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4...
6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...
在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. 事务管理 12.3.5. JdoDialect 12.4...
【Spring应用扩展】主要涉及了Spring框架中的一些高级特性,包括Spring配置的拓展、属性文件的引用、JNDI数据源的使用以及Bean的作用域。下面将详细解释这些知识点。 1. **拓展Spring的配置** - 在Spring框架中,...
Spring框架的XML配置是其核心特性之一,它允许开发者声明Bean的定义,管理依赖关系以及配置其他服务。然而,随着框架的发展,为了简化配置,Spring引入了最小化XML配置的概念,以及注解装配的方式,使得配置更加简洁...
在Spring框架的学习过程中,理解如何使用JDOM解析和操作XML文件对于配置和管理Spring中的bean非常重要。 #### 模拟Spring功能 在深入学习Spring之前,尝试手动实现Spring的部分功能,如依赖注入,可以加深对Spring...
Spring框架是Java开发中广泛应用的轻量级框架,它的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。本篇笔记主要涉及Spring的基础知识,包括如何实例化...
在探讨Spring配XML的十二种技巧时,我们深入解析了几个关键点,这些技巧旨在提升Spring框架中XML配置文件的可读性、可维护性和效率。以下是对文章中提到的几点技巧的详细解读: ### 1. 避免使用自动装配 尽管...
- **基于名称的自动装配**:在`@Autowired`中使用`requiredName`属性指定bean的名称。 ```java @Autowired(requiredName = "specificService") private MyService myService; ``` - **自动装配候选列表**:可以使用`...
然而,使用时需要注意合理控制,避免过度依赖和潜在的注入问题。在实际开发中,结合使用@Autowired和其他注解,可以更好地管理和控制bean之间的依赖关系,从而构建出更加灵活且易于测试的应用。
- JAVA客户端中,可以使用@Autowire注解自动装配FastFileStorageClient对象,从而进行文件上传和下载操作。 - 上传文件时,使用uploadFile方法,需要传入文件内容的字节数组和文件扩展名。 - 下载文件时,可以...
这里我们将深入探讨如何在Java应用中使用Redis Sentinel以及相关的配置和操作。 首先,`RedisTemplateDelegate.java`是Spring Data Redis提供的一个模板类,用于与Redis进行数据交互。在使用Redis Sentinel时,我们...
通过以上步骤,你可以在Spring+Struts2项目中成功集成Druid数据源,并利用其丰富的监控特性优化数据库连接管理。文件"druid数据源说明.docx"和"更新druid连接池.jpg"可能包含更详细的配置示例和更新步骤,建议参考...
Spring框架的自动装配特性可以减少XML配置,通过`autowire`属性实现。`byName`根据bean名称匹配,`byType`根据bean类型匹配。可以在`beans`节点中设置全局自动装配,但需要注意,过度依赖自动装配可能导致组件间...