Spring2之后,出现很多注解,这些注解让Spring的配置变得混乱起来,因此,别人力排Spring的注解。
注解引发的问题:
1、缺乏明确的配置导致程序的依赖注入关系不明确。
2、不利于模块化的装配。
3、给维护带来麻烦,因为你要根据源代码找到依赖关系。
4、通用性不好。如果你哪天抛开了Spring,换了别的Ioc容器,那么你的注解要一个个的删除。
但是很多傻X级的程序员还偶尔给你用点,或半用半不用,当你问及的时候,还一本正经的说某某某书上就是这么用的!!!如果你接手他的代码,会很郁闷。
这里写个例子,为的是看懂带注解的代码,不是推崇注解有多高级,真没必要。
package lavasoft.springstu.anno;
/**
* 一个普通的Bean
*
* @author leizhimin 2009-12-23 10:40:38
*/
public class Foo {
private String name;
public Foo(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package lavasoft.springstu.anno;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Spring自动装配的注解
*
* @author leizhimin 2009-12-23 10:41:55
*/
public class Bar {
@Autowired(required = true)
private Foo foo;
public void f1() {
System.out.println(foo.getName());
}
}
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 引用@Autowired必须定义这个bean -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<!-- 通过构造方法装配的Bean -->
<bean id="foo" class="lavasoft.springstu.anno.Foo">
<constructor-arg index="0" type="java.lang.String" value="aaaa"/>
</bean>
<!-- 通过注解装配的Bean,我还以为它和Foo没关系呢 -->
<bean id="bar" class="lavasoft.springstu.anno.Bar"/>
</beans>
package lavasoft.springstu.anno;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试自动装配Bean
*
* @author leizhimin 2009-12-23 10:55:35
*/
public class Test1 {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("lavasoft/springstu/anno/cfg1.xml");
Bar bar = (Bar) ctx.getBean("bar");
bar.f1();
}
}
运行结果:
aaaa
Process finished with exit code 0
从上面的代码中看到,Spring的注解使得配置文件的逻辑很混乱,如果项目中有大量的类似注解,那维护起来就很困难了。
分享到:
相关推荐
通过@Bean 和spring的factoryBean注入的bean. 以及对应@service注解注入的类 通过@Autowired 注入对象的时间是现根据类型在根据beanName获取的案例集合
NULL 博文链接:https://forestqqqq.iteye.com/blog/2235292
主要介绍了Spring使用@Autowired为抽象父类注入依赖代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring注解@Resource和@Autowired.doc
Spring@Autowired注解与自动装配.rar
自定义标签中@Autowired的属性为null 解决办法:两步 1.新建一个类SpringContext,实现接口ApplicationContextAware; 2.spring.xml中添加<bean id="" class="com............SpringContext"> 3.使用SpingContext...
主要介绍了Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired问题及解决方法 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
主要介绍了你所不知道的Spring的@Autowired实现细节分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Spring框架中 @Autowired 和 @Resource 注解的区别 在 spring 框架中,除了使用其特有的注解外,使用基于 JSR-250 的注解,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。 首先,咱们简单了解 @...
主要介绍了详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了详解Spring @Autowired 注入小技巧,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在阅读本篇之前,如果对后置处理器还不够熟悉的先参考下spring BeanPostProcessor 生命周期 @Autowired使用 构造函数注入 public Class Outer { private Inner inner; @Autowired public Outer(Inner inner) { ...
主要介绍了详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Spring注解@Resource和@Autowired区别对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring Ioc源码分析系列--@Autowired注解的实现原理.doc
通过spring 的BeanPostProcessor 将对象注入到spring之前创建一个代理对象注入到spring容器中,通过@autowired 注入的对象就是指定的代理对象内容
本篇文章主要介绍最重要的三个Spring注解,也就是@Autowired、@Resource和@Service,具有很好的参考价值。下面跟着小编一起来看下吧
1.@Resource是按名称进行注入的,属于java自带的。@Autowired是按类型进行注入的,属于Spring。
主要给大家介绍了因Spring AOP导致@Autowired依赖注入失败的解决方法,文中通过示例代码给大家介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入。接下来给大家介绍解决Springboot @Autowired 无法注入问题,感兴趣的朋友一起看看吧