为什么说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架?

原创 2008年09月19日 12:03:00
   轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 

        ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

        ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 

        ◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 

        ◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 

        所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。 

        而在这里面可见DI(依赖注入)和AOP(面向切面编程)的重要性,下面继续用DI代码来实现打印日志的互换!

        (一):面向接口建立一个输出打印类Appender:

                public interface Appender {
                 public void write(String msg);
                }

        (二):写两个具体方法实现的类来实现这个接口: 先第一个,控制台输出 ConsoleAppender:

        public class ConsoleAppender implements Appender{

                 public void write(String msg) {
                  // TODO Auto-generated method stub                        
                  System.out.println("控制台打印 "+msg);
                 }
 

             }

                再写第二个 存入数据库的日志 DBAppender:

                public class DBAppender implements Appender{

                         public void write(String msg) {
                          // TODO Auto-generated method stub
                                  System.out.println("数据库记录 "+msg);
                                 }

                }

        (三):写两个用户操作类 用来实现用户的处理和数据的处理,并为其添加appender的set方法,来实现注入操作, 第一个,数据的处理:PowerService:

                        public class PowerService {
                                 private Appender appender;
 
                                 public void save() {
                                  // TODO Auto-generated method stub
                                  appender.write("保存数据");
                                 }
 
                                 public void update() {
                                  // TODO Auto-generated method stub
                                  appender.write("修改数据");
                                 }

                                 public void setAppender(Appender appender) {
                                  this.appender = appender;
                                 }
                        }

                同理第二个:用户的操作 UserService:

                        public class UserService {
                         private Appender appender;
  
                         public void setAppender(Appender appender) {
                          this.appender = appender;
                         }
                         public void save()
                         {
                          appender.write("保存用户!");
                         }
                         public void update()
                         {
                          appender.write("更新用户!");
                         }
                        }

        (四):applicationContext.xml中进行配置:

                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
                 "http://www.springframework.org/dtd/spring-beans.dtd">
                <beans>

                 <bean id="UserService" class="com.viita.service.UserService">
                          <property name="appender">
                           <ref bean="appender"/>                                                        
                          </property>                                
                 </bean>
                 <bean id="PowerService" class="com.viita.service.PowerService">
                          <property name="appender">
                           <ref bean="appender"/>
                  </property>                                
                 </bean>
 
                 <bean id="appender" class="com.viita.DBAppender">
                 </bean>                
                </beans>

        (五):建立Test类进行测试:

        public class Test {
         public static void main(String[] args) {
          Resource r = new ClassPathResource("applicationContext.xml");
          BeanFactory factory = new XmlBeanFactory(r);
  
          UserService us = (UserService)factory.getBean("UserService");        
          PowerService ps = (PowerService)factory.getBean("PowerService");
          us.save();
          us.update();
          ps.save();
          ps.update();
         }
        }

开源框架Spring学习之道:IoC控制反转(一)

Java代码   开源框架Spring详解---IoC控制反转(一)       spring在英文里有春天、弹簧、跳跃和泉眼的意思。Spring 也表示是一个开源框架,是为了解决企...
  • u011511429
  • u011511429
  • 2013年08月04日 10:26
  • 1377

Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式

Spring框架的作用:为了简化java开发 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On...
  • h348592532
  • h348592532
  • 2015年05月07日 22:19
  • 2328

关于spring框架中的IOC/DI和AOP,以及声明式事务管理的理解

IOC/DI:中文意思控制反转/依赖注入,针对以前编程,类中的属性都是写死的,直接在程序中给成员变量初始化。这样的编程,耦合度太高,代码的灵活性和扩展性太差。spring的处理方式是,在配置文件中,将...
  • woshichuanqihan
  • woshichuanqihan
  • 2016年08月17日 23:50
  • 2174

JavaEE框架——Spring入门基础(控制反转Ioc和切面技术Aop)

一.简介:      Spring在英语中含义是春天,对于JavaEE开发者来说,Spring框架出现确实带来了一股全新的春天的气息。早在2002年,Rod Johson在其编著的《Expert ...
  • wangjian_an
  • wangjian_an
  • 2016年08月31日 01:26
  • 1112

Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置

1.什么是Spring,有什么作用  --Spring框架属于一个解决方案框架,可以对其他技术和框架进行整合应用。  --*好处是:将程序中的各个组件和框架技术进行解耦,便于日后系统维护,升级和扩展操...
  • daijin888888
  • daijin888888
  • 2016年06月22日 17:29
  • 6020

Spring学习,依赖注入(DI)、控制反转(IoC)和面向切面(AOP)

依赖注入DI和控制反转IoC Spring容器中的依赖注入DI和控制反转IoC xml配置 注解配置 面向切面AOP 面向切面的应用动态代理 Spring容器中的面向切面 xml配置 注解配置 Spr...
  • Nicorui
  • Nicorui
  • 2017年02月13日 15:16
  • 368

idea 实现Spring讲解(Ioc-控制反转)/Aop(面向切面的编程)

IOC 一.IOC(控制反转) 1.Spring框架的作用:管理我们项目业务中的各项Bean(service,dao,Action)实例化类。 2.Spring体系结构图       3.控制...
  • qq_36074163
  • qq_36074163
  • 2017年07月24日 09:45
  • 165

Spring框架运行机制(控制反转,依赖注入,面向切面AOP)

文章属于入门级水平,重要事情说三遍,入门级,入门级,入门级 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion of control 控制反转:由容器控制程序之间的关系,...
  • fei641327936
  • fei641327936
  • 2016年07月24日 17:34
  • 2214

切面(aop)控制反转和依赖注入(IOC,DI)和spring的事务隔离和传播行为

实现AOP,主要通过两类方式: 1.采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行; 2.采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译...
  • Senssic
  • Senssic
  • 2013年04月05日 18:10
  • 1027

java+spring切面编程(aop)spring控制反转(ioc)+hibenrate对象关系映射(ORM) 学习网址

java+spring切面编程(aop)spring控制反转(ioc)+hibenrate对象关系映射(ORM) 学习网址 java线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程...
  • XuanZuoNuo
  • XuanZuoNuo
  • 2013年08月26日 12:54
  • 797
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架?
举报原因:
原因补充:

(最多只允许输入30个字)