Spring IOC AOP详解(一)

 在学习ioc之前,首先理解耦合是什么意思,两个人在一起叫做“耦”。耦合就是交合的意思。
Ioc—Inversion of Control,即“控制反转”,DI(依赖注入)不是什么技术,而是一种设计思想.在没有spring时,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题。A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。
这个例子可以很形象的说明这个问题 。
http://blog.csdn.net/mooxin/article/details/6913599

package com.entity;
public interface QuizMaster {
    public String popQuestion();
}

我们有两个类继承了上面的接口:
类1SpringQuizMaster:

 package com.entity;
    public class SpringQuizMaster implements QuizMaster {
        public String popQuestion() {
            return "Are you new to Spring?";
        }
    }

类2StrutsQuizMaster:

    package com.entity;
    public class StrutsQuizMaster implements QuizMaster {
        public String popQuestion() {
            return "Are you new to Struts?";
        }
    }

上面的两个类是实现了接口中的popQuestion方法,一个返回”Are you new to Spring?”,另一个返回”Are you new to Struts?”。下面我们用写一个一般的service类来向用户显示问题(popQuestion),

    package com.nospring;
    import com.entity.QuizMaster;
    import com.entity.StrutsQuizMaster;
    public class QuizMasterService {
        private QuizMaster quizMaster = new StrutsQuizMaster();
        public void askQuestion(){
            System.out.println(quizMaster.popQuestion());
        }
    }

最后我们写一个类在Main方法中调用service:

    package com.nospring;
    public class QuizProgram {
        public static void main(String[] args) {
            QuizMasterService quizMasterService = new QuizMasterService();
            quizMasterService.askQuestion();
        }
    }

我们可以看到上面的方法很简单,当我们需要打印问题“Are you new to Struts”时,我们需要在QuizMasterService 创建QuizMaster时,QuizMaster quizMaster = new StrutsQuizMaster()。如果我们需要打印问题“Are you new to Spring?”时,需要在在QuizMasterService 创建QuizMaster时,QuizMaster quizMaster = new SpringQuizMaster()。我们可以看到这种代码紧耦合。下面用spring IOC来实现上面的功能。

 package com.spring;
    import com.entity.QuizMaster;
    public class QuizMasterService {
        QuizMaster quizMaster;
        public void setQuizMaster(QuizMaster quizMaster) {
            this.quizMaster = quizMaster;
        }
         public void askQuestion(){
            System.out.println(quizMaster.popQuestion());
        }
    }

我们在QuizMasterService中定义了quizMaster对象并写了一个对此对象的set方法。 我们在使用Spring时可以用构造注入或SET注入,这里我们用了SET注入。下面是Bean的配置文件:

<?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.xsd">
   <bean id="springQuizMaster" class="com.entity.SpringQuizMaster"></bean>
   <bean id="strutsQuizMaster" class="com.entity.StrutsQuizMaster"></bean>
   <bean id="quizMasterService" class="com.spring.QuizMasterService">
      <property name="quizMaster">
        <ref local="springQuizMaster"/>
      </property>
   </bean>
</beans>
下面我们调用service方法:
    package com.spring;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class QuizProgram {
        public static void main(String[] args) {       
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            QuizMasterService quizMasterService = (QuizMasterService) context.getBean("quizMasterService");
            quizMasterService.askQuestion();
        }

    }

这样我们可以看到代码之间没有那么多的耦合,我们只需在配置文件中对想显示的内容进行修改即可。通过mooxin写的这个例子可以很清晰的理解ioc是什么,干嘛用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值