`
hlbng
  • 浏览: 177422 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring之@Autowired问题

阅读更多


 
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的注解使得配置文件的逻辑很混乱,如果项目中有大量的类似注解,那维护起来就很困难了。

分享到:
评论

相关推荐

    (转)Spring中@Autowired注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、构造函数、方法或方法参数上使用`@Autowired`时,Spring会自动查找与所需类型匹配的bean,并将其注入到相应的位置。如果找到多个匹配的bean,...

    Spring使用@Autowired注解自动装配

    在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象父类中,可能不会生效,因为抽象父类不能被实例化。...

    Spring@Autowired注解与自动装配.rar

    在Spring框架中,`@Autowired`注解是一个关键特性,用于实现依赖注入(Dependency Injection,简称DI)。依赖注入是设计模式中的一个重要概念,它有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。`@...

    Spring注解@Resource和@Autowired.doc

    Spring 注解@Resource 和@Autowired Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 ...

    SSH笔记-通过@Autowired配置注入关系

    在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...

    因Spring AOP导致@Autowired依赖注入失败的解决方法

    在使用 Spring AOP 时,可能会遇到Autowired 依赖注入失败的问题。例如,在使用 Spring AOP 实现操作日志记录时,service 无法被注入。这可能是由于方法的修饰符是 private 导致的。 二、问题分析 在 org.spring...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

    Spring @Autowired

    这个注解是Spring框架的核心特性之一,极大地简化了代码的编写和维护。接下来,我们将深入探讨`@Autowired`的工作原理、使用场景以及相关的最佳实践。 ### 1. `@Autowired`的基本用法 `@Autowired`注解可以用于...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    Spring框架的@Autowired自动装配是其依赖注入(Dependency Injection, DI)机制的核心部分,它极大地简化了Java应用的组件装配和管理。本篇文章将深入探讨@Autowired的XML版本、Annotation版本以及源码层面的理解,...

    Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired问题及解决方法

    Spring Boot 自定义 Shiro 过滤器无法使用 @Autowired 问题及解决方法 在 Spring Boot 中集成 Shiro 并使用 JWT 进行接口认证时,可能会遇到自定义 Shiro 过滤器无法使用 @Autowired 问题。下面将详细介绍该问题及...

    【Java面试】@Resource 和 @Autowired 的区别.doc

    在 Spring 框架中,@Resource 和 @Autowired 是两种常用的依赖注入方式,但是它们之间存在着一些关键的区别。 首先,让我们来了解 @Autowired 注解。@Autowired 是 Spring 框架提供的一个注解,默认是根据类型来...

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    Spring 依赖注入:@Autowired,@Resource 和@Inject 区别与实现原理 Spring 依赖注入是指在应用程序中将对象之间的依赖关系自动装配的过程。Spring 框架提供了多种依赖注入方式,包括 @Autowired、@Resource 和@...

    12 @Autowired是如何工作的?-Spring注解源码深度揭秘-慕课专栏1

    在Spring框架中,`@Autowired`注解是一个关键的依赖注入(DI)工具,它极大地简化了组件之间的关联。本文将深入探讨`@Autowired`的工作原理以及其在Spring中的实现方式。 首先,`@Autowired`的基本作用是自动装配Bean...

    你所不知道的Spring的@Autowired实现细节分析

    【Spring @Autowired 实现细节分析】 ...理解这些细节对于优化Spring应用的依赖管理以及排查相关问题至关重要。通过深入研究源码,我们可以更好地掌握Spring的自动化装配机制,从而写出更高效、更健壮的代码。

    @Autowired 注解是如何实现的?(csdn)————程序.pdf

    【@Autowired注解详解及其实现原理】 在Spring框架中,`@Autowired`注解是核心的依赖注入(Dependency Injection...理解`@Autowired`的工作原理有助于我们更好地利用Spring框架,同时也能避免可能出现的依赖注入问题。

    Spring Ioc源码分析系列--@Autowired注解的实现原理.doc

    Spring Ioc源码分析系列--@Autowired注解的实现原理 @ Автоwired注解是 Spring Framework 中的一个重要组件,它提供了自动装配的功能,能够将 Bean 之间的依赖关系自动解析和注入。今天,我们将深入探讨 @...

    自定义标签中@Autowired的属性为null

    自定义标签中@Autowired的属性为null 解决办法:两步 1.新建一个类SpringContext,实现接口ApplicationContextAware; 2.spring.xml中添加&lt;bean id="" class="com............SpringContext"&gt; 3.使用SpingContext...

    HibernateDaoSupport 与@Autowired

    在Java开发领域,尤其是Spring框架的应用中,`HibernateDaoSupport`和`@Autowired`是两个非常重要的概念。它们分别代表了Hibernate对DAO层的支持以及Spring框架的依赖注入机制。接下来,我们将深入探讨这两个知识点...

Global site tag (gtag.js) - Google Analytics