spring入门篇(一)

来源:互联网 发布:止汗露哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/07 10:04

专题一

·接口及面向接口的编程

接口

·用于沟通的中介物的抽象化

·实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使 其能被修改内部而不影响外界其他实体与其交互的方式

·对应java接口即声明,声明了那些方法是公开的

·java8中接口可以有方法体

面向接口编程

·结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能结构,各层间 仅依赖接口而非实现类

·接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要

·面向接口编程中的接口是用于隐藏具体实现和实现多性的组件

·例子

 

·什么是IOC

·IOC:控制反转  控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是 由外部容器负责创建和维护

·DI(依赖注入)是一种实现方式。所谓依赖注入,就是由IOC容器在运行期间,动态 的将某种依赖关系注入到对象之中

·目的:创建对象并且组装对象之间的关系

 

IOC房屋中介

·找中介——————————找IOC容器

·中介介绍房子————————容器创建并返回对象

·租房、入住——————————使用对象

 

 

·SpringBean配置

IOC容器中,他把所有的对象都称之为BeanSpringBean配置:

 


Interface OneInterface { void hello();}

Class OneInterfaceImpl{ public void hello(String s){syso(s}}

 

可以发现:不必自己创建对象了,IOC机制就提供了,面向接口编程了,IOC隐藏实现了,不管对象了(IOC管了)

·Bean的初始化

 

 

 

 

 

 

 

·Spring的常用注入方式

·Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为。(若类A中有一个B类型的实例变量,则在加载Bean A在对变量b赋值时也会加载Bean B

·常用的两种注入方式:设值注入、构造注入

 

InjectionServiceImpl会自动调用本类中的setInjectionDAO方法对其类中的属性injectionDAO赋值,ref指得是第二个<bean>中的id,这样将两个<bean>联系起来

 

 

service是指处理业务逻辑的部分,而DAO是对数据库进行操作的部分,两者分工明确

 

代码示例:

Service:

Interface InjectionService { void save1(String s);}

 

class InjectionServiceImpl implements InjectionService{

private InjectionDAO injectionDAO;

 

public void save1(String s){

Syso(“Serivce接收参数:”+s);

s = s+”:”+this.hashCode();

injectionDAO.save2(s)

}

 

public void setInjectionDAOInjectionDAO injectionDAO{

this.injectionDAO = injectionDAO

}

}

 

Inteface InjectionDAO { void save2String s);}

 

class InjectionDAOImpl implements InjectionDAOImpl{

publi void save2String s{

Syso(“DAO保存参数:”+s)

}

}

spring-injection.xml文件配置如上设值注入。注意第一个Bean中的property nameInjectionServiceImpl类中的属性injectionDAOref是第二个Bean中的id

 

junit类:

@RunWithBlockJUnit4ClassRunner.class

class InjectionTest extends UnitTestBase{

 

public InjectionTest(){

super(classpath:spring-injection.xml);

}

 

@Test

public void testSetter(){

InjectionService service = super.getBean(injectionService);//调用该类的set方法,对xml中配置的对应的property赋值

service.save(“这是要保存的数据”);

}

}

 

然后运行junit测试方法,输出如下:(注意整个过程并没有调用service实现类中的set方法对类中的DAO类实例赋值

Service接收参数:这是要保存的数据

DAO保存参数:这是要保存的数据:某哈希码

 

 

 

构造注入(除了<constructor-arg 其他与前者相同)

 

 

调用InjectionServiceImpl中的一个构造器,该构造器有一个参数injectionDAO,并对该类中的injectionDAO属性进行赋值。要注意第二行中name必须与service实现类中的属性名相同。

 

代码示例:将上面的代码示例中的set赋值方法改为构造器赋值,xml同时修改为构造器参数即可

原创粉丝点击