• Spring浅探


      热度最大的框架,它也称为业务层框架。Spring这个框架的诞生,给程序员揭示了两个主要的思想:Ioc,Aop;

      最近的网页架构可以分为这样。

      

      传统结构中,每个层都得new出依赖层的类进行一些本层操作,而Spring的出现使得这些层与层的依赖关系变得不那么紧致。所有的需要新建的类都由Spring的bean工厂提供。控制权限被反转了,所以称为控制反转(Inversion of Control)。

      而在业务层有很多模块,为了使每个模块更专注于自己的工作,并且不用考虑模块间的耦合,Spring提出了Aop的思想。类与类间的关系除了继承多态,没有定义平行的关系,而Aop弥补了类间关系,使得切面实现业务又丰富又简单。

      Ioc范例

    package IoC_AOP;
    
    public interface Person {
        public void speak();
    }
    package IoC_AOP;
    
    public class Chinese implements Person{
        private String name;
        private String age;
        public Chinese(){
            
        }
        public Chinese(String name, String age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        @Override
        public void speak() {
            // TODO Auto-generated method stub
            System.out.println("I'm Chinese,my name is "+this.name+" ,my age is "+this.age);
    
        }
    
    }
    package IoC_AOP;
    
    public class American implements Person{
        private String name;
        private String age;
        public American(){
            
        }
        public American(String name, String age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        @Override
        public void speak() {
            // TODO Auto-generated method stub
            System.out.println("I'm American,my name is "+this.name+" ,my age is "+this.age);
        }
        
    }
        public void IocTest(){
            Injection in = new Injection();
            Person p1 = in.proxy1("zhangsan", "18");
            Person p2 = in.proxy2("tom", "19");
            p1.speak();
            p2.speak();
        }

       Aop思想原理,通过使用动态代理来实现。

    package IoC_AOP;
    
    public interface interface1 {
        public void doSomething();
    }
    package IoC_AOP;
    
    
    public class subject implements interface1{
        public void doSomething(){
            System.out.println("hello i'm doing my jobs");
        }
    }
    package IoC_AOP;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class proxySubject implements InvocationHandler{
    
        private Object proxied;
        public proxySubject(Object proxied){
            this.proxied = proxied;
        }
        public void setProxied(Object proxied) {
            this.proxied = proxied;
        }
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // TODO Auto-generated method stub
            //执行方法之前可以做一些操作
            
            //执行目标方法
            method.invoke(proxied, args);
            //之后可以执行一些操作
            return null;
        }
        
    }
            subject real = new subject();   
            interface1 proxySubject = (interface1)Proxy.newProxyInstance(interface1.class.getClassLoader(), 
             new Class[]{interface1.class}, 
             new proxySubject(real));
            proxySubject.doSomething();
    proxy:  指代我们所代理的那个真实对象
    method:  指代的是我们所要调用真实对象的某个方法的Method对象
    args:  指代的是调用真实对象某个方法时接受的参数
    

      Spring的配置

        下载spring-framework-3.2.0.RELEASE,在官网下载,然后再下载commons-logging-1.2。

        添加到buildpath。下载下来的包的lib下,同一个jar包有三份。

        

        只要导入jar就行。

        

        然后导入commons-loggin的jar包。

        src下新建applicationContext.xml配置文件。配置文件的bean代表加载一个类,通过Spring的工厂生产出来并注入到应用的类。    

    <?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"
     xmlns:tx="http://www.springframework.org/schema/tx"
     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
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
     default-autowire="byName" default-lazy-init="true">
    <bean id="chinese" class="Beans.Chinese">
        <property name="name">
            <value>sss</value>
        </property>
        <property name="age">
            <value>18</value>
        </property>
    </bean>
    <bean id="america" class="Beans.American">
        <property name="name">
            <value>xxx</value>
        </property>
        <property name="age">
            <value>19</value>
        </property>
    </bean>
    
    </beans>

      书写范例 

    package Beans;
    
    public interface Person {
        public void speak();
    }
    package Beans;
    
    public class Chinese  implements Person{
        private String name;
        private int age;
        
    
        public String getName() {
            return name;
        }
    
    
        public void setName(String name) {
            this.name = name;
        }
    
    
        public int getAge() {
            return age;
        }
    
    
        public void setAge(int age) {
            this.age = age;
        }
    
    
        @Override
        public void speak() {
            // TODO Auto-generated method stub
            System.out.println("I'm Chinese,my name "+this.name+",my age "+this.age);
            
        }
    
    }
    package Beans;
    
    public class American implements Person{
        private String name;
        private String age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        @Override
        public void speak() {
            // TODO Auto-generated method stub
            System.out.println("I'm American,my name "+this.name+",my age "+this.age);
        }
        
    }

      使用Junit包进行测试。  

    package JunitTest;
    
    import org.junit.Test;
    import org.springframework.context.*;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import Beans.Person;
    
    public class Test1 {
        @Test
        public void TestSpringMethod(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Person p1=(Person)context.getBean("chinese");
            p1.speak();
            p1=(Person)context.getBean("america");
            p1.speak();
            
        }
    }

      时日尚浅,没有经验,日后加倍努力。

  • 相关阅读:
    ACM集训的第一题
    python作用域
    python——异常类型
    PycharmV2017 1.x使用说明
    python之路——面向对象(进阶篇)
    python之路——面向对象(基础篇)
    python学习之路——基础篇(3)模块(续)
    python之路——基础篇(2)模块
    Python学习之路——基础篇(1)字符串格式化
    初学设计模式:策略模式
  • 原文地址:https://www.cnblogs.com/chentingk/p/5837635.html
Copyright © 2020-2023  润新知