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();

    }
}

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

时间: 2024-10-05 23:46:57

Spring浅探的相关文章

Delphi 的RTTI机制浅探&lt;二&gt;

目 录===============================================================================⊙ GetTypeData 函数⊙ GetPropInfo 函数⊙ FindPropInfo 函数⊙ GetPropInfos 函数⊙ SortPropList 函数⊙ GetPropList 函数------------------------------------------------------⊙ GetObjectProp

Delphi 的RTTI机制浅探&lt;一&gt;

目 录===============================================================================⊙ DFM 文件与持续机制(persistent)⊙ ReadComponentResFile / WriteComponentResFile 函数⊙ Delphi 持续机制框架简述⊙ 一个 TForm 对象的创建过程⊙ TStream Class 和 TStream.ReadComponent 方法⊙ TReader Class 和

location对象浅探

location对象浅探

Ollydbg 中断方法浅探

Ollydbg是一个新的32位的汇编层调试软件.适应于windows98.me.2000.xp和2003操作系统.由于他具有图形窗口界面,所以操作方便.直观,是cracker的好工具. 由于Ollydbg没有了TRW2000的万能断点,所以许多的新手感觉到用Ollydbg断点不好找.现在我来的说说Ollydbg下中断的几种方法.本人是个菜鸟,水平有限,可能不能完整的写出来,也可能存在错误.请大家指正. 我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己参考. 第一 寻常断点

ssh安全机制浅探

1.  ssh 协议 SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题 2.细节 ssh 登录 1.ssh向sshd发起请求,sshd会告诉请求过来的ssh自己是啥版本,还又能跟那些版本搭话: 2.ssh确认自己版本够新可以和sshd交互后,ssh和sshd就开始交换双方能支持的加密算法之类的信息 3.sshd就首先生成session key, 把其中的sshd_key

OCR技术浅探

OCR技术浅探:https://www.52ml.net/tags/ocr%E6%8A%80%E6%9C%AF%E6%B5%85%E6%8E%A2

iOS中RunLoop机制浅探

iOS中RunLoop机制浅探 一.浅识RunLoop RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?首先,我们先来观察一下我们的程序运行机制. 无论是面向对象的语言或是面向过程的语言,代码的执行终究是面向过程的.线程也一样,一个线程从开始代码执行,到结束代码销毁.就像HELLO WORLD程序,打印出字符串后程序就结束了,那么,我们的app是如何实现如下这样的机制的呢:app从运行开始一直处于待命状态,接收到类似点

App加密那点事&amp;浅探爱加密原理

先来说一下一些常用的加密方法: 伪加密 伪加密是Android4.2.x系统发布前的加密方式之一,通过java代码对APK(压缩文件)进行伪加密,其修改原理是修改连续4位字节标记为"P K 01 02"的后第5位字节,奇数表示不加密偶数表示加密. 虽然伪加密可以起到一定防破解作用,但也会出现问题,首先使用伪加密对其APK加密后市场无法对其进行安全检测,导致部分市场会拒绝这类APK上传:其次,伪加密的加密方式和解密方式也早已公布导致它的安全程度也大大降低:再次,Android4.2.x系

OCR技术浅探(转)

网址:https://spaces.ac.cn/archives/3785 OCR技术浅探 作为OCR系统的第一步,特征提取是希望找出图像中候选的文字区域特征,以便我们在第二步进行文字定位和第三步进行识别. 在这部分内容中,我们集中精力模仿肉眼对图像与汉字的处理过程,在图像的处理和汉字的定位方面走了一条创新的道路. 这部分工作是整个OCR系统最核心的部分,也是我们工作中最核心的部分. 传统的文本分割思路大多数是"边缘检测 + 腐蚀膨胀 + 联通区域检测",如论文[1]. 然而,在复杂背