`
kingmxj
  • 浏览: 182490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于注释的 Spring IoC

阅读更多
基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean、装配 Bean 的功能,您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置。

 

   注释的优势
       它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。
       注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
      

       因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。在这篇文章里,我们将向您讲述使用注释进行 Bean 定义和依赖注入的内容。

    原来我们是怎么做的
UserDAO.java:

Java代码
package com.tanlan.springdemo;  
/** 
* UserDAO接口 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
public interface UserDAO {  
    public void addUser();  


package com.tanlan.springdemo;
/**
* UserDAO接口
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
public interface UserDAO {
public void addUser();
}

UserJDBCDAO.java:



Java代码
package com.tanlan.springdemo;  
/** 
* UserDAO的JDBC实现 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
 
public class UserJDBCDAO implements UserDAO {  
    public void addUser() {  
        System.out.println("使用JDBC增加用户信息!");  
    }  
 


package com.tanlan.springdemo;
/**
* UserDAO的JDBC实现
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/

public class UserJDBCDAO implements UserDAO {
public void addUser() {
System.out.println("使用JDBC增加用户信息!");
}

}


UserService.java:



Java代码
package com.tanlan.springdemo;  
/** 
* User业务逻辑处理类 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
public class UserService {  
    private UserDAO userDAO;  
 
    public void addUser() {  
        userDAO.addUser();  
    }  
 
    public UserDAO getUserDAO() {  
        return userDAO;  
    }  
 
    public void setUserDAO(UserDAO userDAO) {  
        this.userDAO = userDAO;  
    }  
 


package com.tanlan.springdemo;
/**
* User业务逻辑处理类
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
public class UserService {
private UserDAO userDAO;

public void addUser() {
userDAO.addUser();
}

public UserDAO getUserDAO() {
return userDAO;
}

public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

}
配置文件 spring.xml:


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" 
    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"> 
    <bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean> 
    <bean id="userService" class="com.tanlan.springdemo.UserService"> 
        <property name="userDAO" ref="userJdbcDAO"></property> 
    </bean> 
</beans> 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean>
<bean id="userService" class="com.tanlan.springdemo.UserService">
<property name="userDAO" ref="userJdbcDAO"></property>
</bean>
</beans>
测试类Test.java:



Java代码
package com.tanlan.springdemo;  
 
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
 
public class Test {  
 
    public static void main(String[] args) {  
        String[] files = { "spring.xml" };  
        ApplicationContext context = new ClassPathXmlApplicationContext(files);  
        UserService userService = (UserService) context.getBean("userService");  
        userService.addUser();  
    }  
 


package com.tanlan.springdemo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {
String[] files = { "spring.xml" };
ApplicationContext context = new ClassPathXmlApplicationContext(files);
UserService userService = (UserService) context.getBean("userService");
userService.addUser();
}

}

使用 @Autowired 注释
          Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。



对UserService.java的改进:

Java代码
package com.tanlan.springdemo;  
 
import org.springframework.beans.factory.annotation.Autowired;  
 
/** 
* User业务逻辑处理类 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
public class UserService {  
    @Autowired 
    private UserDAO userDAO;  
 
    public void addUser() {  
        userDAO.addUser();  
    }  


package com.tanlan.springdemo;

import org.springframework.beans.factory.annotation.Autowired;

/**
* User业务逻辑处理类
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
public class UserService {
@Autowired
private UserDAO userDAO;

public void addUser() {
userDAO.addUser();
}
}


这个类甚至可以省略getter/setter.



配置文件spring.xml的改进:

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" 
    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"> 
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"></bean> 
    <bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean> 
    <bean id="userService" class="com.tanlan.springdemo.UserService"></bean> 
</beans> 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"></bean>
<bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean>
<bean id="userService" class="com.tanlan.springdemo.UserService"></bean>
</beans>


      Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。

        UserService类的属性不需要配置了。

当候选 Bean 数目不为 1 时的应对方法
        在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。
       和找不到一个类型匹配 Bean 相反的一个错误是:如果 Spring 容器中拥有多个候选Bean,Spring 容器在启动时也会抛出 BeanCreationException 异常。
       Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称

加入现在多了一个UserDAO的实现类

UserHibernateDAO.java:



Java代码
package com.tanlan.springdemo;  
 
/** 
* UserDAO的Hibernate实现 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
public class UserHibernateDAO implements UserDAO {  
    public void addUser() {  
        System.out.println("使用Hibernate增加用户信息!");  
    }  


package com.tanlan.springdemo;

/**
* UserDAO的Hibernate实现
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
public class UserHibernateDAO implements UserDAO {
public void addUser() {
System.out.println("使用Hibernate增加用户信息!");
}
}

更新spring.xml:

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" 
    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"> 
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"></bean> 
    <bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean> 
    <bean id="userHibernateDAO" class="com.tanlan.springdemo.UserHibernateDAO"></bean> 
    <bean id="userService" class="com.tanlan.springdemo.UserService"></bean> 
</beans> 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"></bean>
<bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean>
<bean id="userHibernateDAO" class="com.tanlan.springdemo.UserHibernateDAO"></bean>
<bean id="userService" class="com.tanlan.springdemo.UserService"></bean>
</beans>


当Spring自动找寻UserDAO类型的类时,会找到两个符合要求的类:

No unique bean of type [com.tanlan.springdemo.UserDAO] is defined: expected single matching bean but found 2: [userJdbcDAO, userHibernateDAO]



需要改进UserService.java:

Java代码
package com.tanlan.springdemo;  
 
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.beans.factory.annotation.Qualifier;  
 
/** 
* User业务逻辑处理类 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
public class UserService {  
    @Autowired 
    @Qualifier("userJdbcDAO")  
    private UserDAO userDAO;  
 
    public void addUser() {  
        userDAO.addUser();  
    }  


package com.tanlan.springdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

/**
* User业务逻辑处理类
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
public class UserService {
@Autowired
@Qualifier("userJdbcDAO")
private UserDAO userDAO;

public void addUser() {
userDAO.addUser();
}
}


使用 <context:annotation-config/> 简化配置
        Spring 2.1 添加了一个新的 context 的 Schema 命名空间,该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置.

       改进spring.xml:

Xml代码
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    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"> 
    <context:annotation-config></context:annotation-config> 
    <bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean> 
    <bean id="userHibernateDAO" class="com.tanlan.springdemo.UserHibernateDAO"></bean> 
    <bean id="userService" class="com.tanlan.springdemo.UserService"></bean> 
</beans> 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<context:annotation-config></context:annotation-config>
<bean id="userJdbcDAO" class="com.tanlan.springdemo.UserJDBCDAO"></bean>
<bean id="userHibernateDAO" class="com.tanlan.springdemo.UserHibernateDAO"></bean>
<bean id="userService" class="com.tanlan.springdemo.UserService"></bean>
</beans> 注意命名空间:xmlns:context=http://www.springframework.org/schema/context的添加。

以及<context:annotation-config/>的使用。

使用 @Component
Spring 2.5 提供的 @Component 注释可以定义 Bean,从 XML 配置文件中完全移除 Bean 定义的配置。

改进UserJDBCDAO.java:

Java代码
package com.tanlan.springdemo;  
 
import org.springframework.stereotype.Component;  
 
/** 
* UserDAO的JDBC实现 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
@Component("userJdbcDAO")  
public class UserJDBCDAO implements UserDAO {  
    public void addUser() {  
        System.out.println("使用JDBC增加用户信息!");  
    }  
 


package com.tanlan.springdemo;

import org.springframework.stereotype.Component;

/**
* UserDAO的JDBC实现
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
@Component("userJdbcDAO")
public class UserJDBCDAO implements UserDAO {
public void addUser() {
System.out.println("使用JDBC增加用户信息!");
}

}

改进UserHibernateDAO.java:

Java代码
package com.tanlan.springdemo;  
 
import org.springframework.stereotype.Component;  
 
/** 
* UserDAO的Hibernate实现 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
@Component("userHibernateDAO")  
public class UserHibernateDAO implements UserDAO {  
    public void addUser() {  
        System.out.println("使用Hibernate增加用户信息!");  
    }  


package com.tanlan.springdemo;

import org.springframework.stereotype.Component;

/**
* UserDAO的Hibernate实现
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
@Component("userHibernateDAO")
public class UserHibernateDAO implements UserDAO {
public void addUser() {
System.out.println("使用Hibernate增加用户信息!");
}
}


改进UserService.java:

Java代码
package com.tanlan.springdemo;  
 
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.beans.factory.annotation.Qualifier;  
import org.springframework.stereotype.Component;  
 
/** 
* User业务逻辑处理类 
*  
* @author tanlan tl_smile@163.com 
*  
* @date 2009-8-3 
*/ 
@Component 
public class UserService {  
    @Autowired 
    @Qualifier("userJdbcDAO")  
    private UserDAO userDAO;  
 
    public void addUser() {  
        userDAO.addUser();  
    }  


package com.tanlan.springdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

/**
* User业务逻辑处理类
*
* @author tanlan tl_smile@163.com
*
* @date 2009-8-3
*/
@Component
public class UserService {
@Autowired
@Qualifier("userJdbcDAO")
private UserDAO userDAO;

public void addUser() {
userDAO.addUser();
}
}


改进spring.xml:

Xml代码
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    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"> 
    <context:component-scan base-package="com.tanlan.springdemo"></context:component-scan> 
</beans> 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<context:component-scan base-package="com.tanlan.springdemo"></context:component-scan>
</beans>


      在使用 @Component 注释后,Spring 容器必须启用类扫描机制以启用注释驱动 Bean 定义和注释驱动 Bean 自动注入的策略.
       <context:component-scan/> 的 base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理.

注释配置和 XML 配置的适用场合
       是否有了这些 IOC 注释,我们就可以完全摒除原来 XML 配置的方式呢?答案是否定的。有以下几点原因:
       注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
如果 Bean 不是自己编写的类(如 JdbcTemplate、SessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。
       注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于@Transaction 事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。
      

       所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。

分享到:
评论

相关推荐

    基于Maven构建的Spring IoC源码实例

    在"基于Maven构建的Spring IoC源码实例"中,我们可以学到如何使用Maven搭建Spring项目,并通过Spring IoC实现组件间的依赖注入。以下是这个实例中可能包含的关键知识点: 1. **Maven项目结构**:了解标准的Maven...

    简单手写springIOC注解模式

    以上就是关于“简单手写springIOC注解模式”的主要知识点。通过这些注解,我们可以实现灵活、简洁的Spring应用配置,使得代码更加易于维护和扩展。在实际项目中,这些知识可以帮助我们更高效地构建和管理应用程序的...

    使用Spring2.5的Autowired实现注释型的IOC

    "使用Spring2.5的Autowired实现注释型的IOC" 在Java开发中,IOC(Inversion of Control,控制反转)是一种常见的设计模式,它可以将对象之间的耦合关系解耦合,使得系统更加灵活和可维护。在Spring框架中,IOC是...

    spring 源码中文注释

    通过XML配置或基于注解的方式,我们可以告诉IoC容器如何创建和装配对象。在源码中,`BeanFactory`和`ApplicationContext`接口是IoC容器的主要代表,前者是基础版本,后者提供了更多的企业级特性,如事件发布、国际化...

    spring源码中英文注释

    6. **Spring AOP实现**:Spring的AOP并非完全基于代理的,而是使用了动态代理和CGLIB库。在源码中,你可以看到`JdkDynamicAopProxy`和`CglibAopProxy`的实现细节。 7. **Bean的生命周期**:从bean的实例化、属性...

    MyBatis 基于注解的增删改查示例(Spring IOC注入)

    MyBatis 基于注解的增删改查示例程序,使用Spring的IOC机制注入,降低程序间的耦合性

    Spring源码解析4章150页+Spring3.2.4中文注释源码

    2、SpringIOC体系结构 3、源码分析-IOC容器的初始化 4、源码分析-IOC容器的依赖注入 5、源码分析-IOC容器的高级特性 三阶段 Spring AOP的涉及原理及具体实践 SpringJDBC的涉及原理及二次开发 SpringMVC框架设计原理...

    spring源码(注释+测试版)

    这份"spring源码(注释+测试版)"提供了Spring框架的源代码,带有注释和测试用例,对于开发者深入理解Spring的工作原理非常有帮助。 1. **spring-core**:这是Spring框架的基础模块,包含了核心的工具类和资源处理...

    spring 编译后源码(有注释)

    在"spring 编译后源码(有注释)"这个压缩包中,你将获得 Spring 框架 5.0.2.RELEASE 版本的源代码,这些源码已经包含了中文注释,对于学习和理解 Spring 框架的工作原理极其有价值。 1. **IoC(Inversion of ...

    spring-framework-5.0.2.RELEASE-中文注释版(源码)

    虽然不是直接包含在 5.0.2.RELEASE 中,但 Spring Boot 是基于 Spring 的快速开发框架,它预配置了许多默认设置,简化了项目初始化和配置过程。 7. **中文注释** 压缩包中的中文注释版源码对于中国开发者来说是...

    使用 Spring 2_5 注释驱动的 IoC 功能.mht

    **Spring 2.5 注释驱动的 IoC 功能详解** Spring 框架自 2.5 版本开始引入了对注解的强大支持,极大地简化了依赖注入(Dependency Injection,简称 DI)的配置过程。注解驱动的 IoC(Inverse of Control,控制反转...

    springMVC详解以及注解说明 中文WORD版.rar

    基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean、装配 Bean 的功能,您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置。本文通过实例详细讲述了 ...

    spring-framework-5.2.0.RELEASE-master.zip

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能闻名。在"spring-framework-5.2.0.RELEASE-master.zip"这个压缩包中,我们可以深入理解Spring的核心机制,通过源码...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    在这一部分中,你将了解到Spring框架的基本概念和使用方法,并通过实例探讨了Spring IoC的控制反转和简单工厂模式。 该资源主要包含以下内容(项目文件实例和注释齐全可以帮助你理): Spring框架简介:对Spring...

    spring源码,配套完善的注释

    Spring框架是Java开发中不可或缺的重要组成部分,它以其强大的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性,以及丰富的模块化设计,成为企业级应用开发的首选。本压缩包包含了Spring的...

    01-StudentApp:学生详细信息使用Spring引导来演示@ComponetScan @Component @Bean注释

    学生详细信息使用Spring Boot演示@ComponetScan @Component @Bean注释与使用低优先级并执行的@Bean注释相比,通过Spring IOC容器分析@component在使spring Bean对象成为对象时具有更高的优先级,并且在@component...

    马士兵Spring课堂笔记(超级详细版).pdf

    本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring JDBC面向接口编程等内容。 面向接口...

    spring-framework-5.0.2.RELEASE-小椰子中文注释版.zip

    Spring以IoC(控制反转)和AOP(面向切面编程)为核心,IoC通过依赖注入来管理对象的生命周期,使代码更易于测试和维护。AOP则允许开发者在不修改原有代码的情况下,插入新的功能或记录日志,提高了代码的可复用性和...

    spring-framework-5.1.x-源碼解析详细注解

    本资源提供了Spring 5.1.x版本的源码详细注解,旨在帮助开发者深入理解Spring框架的核心功能,包括IOC(Inversion of Control)容器、懒加载(lazy-init)、循环依赖处理、AOP(Aspect Oriented Programming)实现...

Global site tag (gtag.js) - Google Analytics