`
liqian5251
  • 浏览: 16846 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Spring 配置的两种方式

阅读更多
一:Spring的IOC与DI
IOC (Inverse Of Control) 控制反转
控制反转是将组建依赖关系的创建与管理置于程序之外的技术。控制反转IoC意味着将你设计好的类交由系统去控制,而不是由你的类内部控制。将类的创建与获取提取到外部。因为使用IOC技术来创建和管理对象,所以我们通常又将IOC称之为“IOC容器”。
由IOC容器控制程序间的关系,而不是由应用程序直接控制。
由于控制权由应用程序转向了IOC容器,所以称之为反转。

DI(Dependency Injection) 依赖注入
依赖注入是指我们获取一个对象时,不再需要手动new(),而是由IOC容器进行创建与获取。

IOC与DI的关系,IOC是宏观上看控制权的转换,DI则是从微观上看控制权时如何转换的,二者是一码事。
二:IOC/DI实现方式
1.Setter注入:使用setXXXX()方法进行注入
2.使用构造方法进行注入
三:IOC容器的Bean作用域
Bean Scope 属性
singleton 单例模式,在ioc容器中有且只有一个对象
prototype多例模式,每次从容器中获取到的都是新对象。
四:使用注解配置
IOC 组件
@Service – 标记业务bean
@Controller –标记 Action
@Repository – 标记DAO
@Component –不好归类时,使用Component
注入方式
@Resource 按名称装配
@Autowired 按类型装配

例子:
第一步:在applicationContext.xml中写上
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<context:component-scan base-package="com.bjsxt.jlls"></context:component-scan>
//当容器初始化时扫描com.bjsxt.jlls包,把它这个包以及子包中有注解标注的就把它实例化放到ioc容器中。

</beans>
第二步:package com.bjsxt.jlls.dao

@Repository
//@Component
public class CustomerDAO {
public CustomerDAO(){
System.out.println("实例化CustomerDAO");
}

public void save(){
System.out.println("调用了使用Hibernate方法实现的CustomerDAO.save()方法");
}
}
第三步:
@Service
//@Component
public class CustomerService {

//IOC容器中有木有name="customerDAO"的对象
@Resource(name = "customerDAO")
private CustomerDAO cDAO = null;
@Resource(name = "purchaseDAO")
private PurchaseDAO pDAO = null;

public CustomerService(){
System.out.println("实例化CustomerService");
}

public void save(){
System.out.println("调用了CustomerService.save()方法");
cDAO.save();
pDAO.save();
}

public CustomerDAO getcDAO() {
return cDAO;
}

public void setcDAO(CustomerDAO cDAO) {
this.cDAO = cDAO;
}

public PurchaseDAO getpDAO() {
return pDAO;
}

public void setpDAO(PurchaseDAO pDAO) {
this.pDAO = pDAO;
}


}
第四步:
@Component
public class CustomerAction {
@Resource
private CustomerService customerService = null;

public CustomerAction(){
System.out.println("实例化CustomerAction");
}

public String save(){
System.out.println("调用了CustomerAction.save()方法");
customerService.save();
return null;
}
public CustomerService getCustomerService() {
return customerService;
}
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
}
第五步:测试,注解方法获取对象默认的对象名称为类名第一个字母小写如:customerDao
public class CustomerActionTester {
@Test
public void testSave(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//CustomerDAO cdao = (CustomerDAO)ctx.getBean("customerDAO");
//cdao.save();

//CustomerService cs = (CustomerService)ctx.getBean("customerService");
//cs.save();

CustomerAction action = (CustomerAction)ctx.getBean("customerAction");
action.save();
}
}
五:配置文件配置
在applicationContext
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- . 具体配置... -->
<bean name="customerDAO" class="com.bjsxt.jlls.dao.CustomerDAO"></bean>
<bean name="customerJdbcDAO" class="com.bjsxt.jlls.dao.CustomerJdbcDAO"></bean>
<bean name="purchaseDAO" class="com.bjsxt.jlls.dao.PurchaseDAO"></bean>

<bean name="customerService" class="com.bjsxt.jlls.service.CustomerService">
<property name="customerDAO" ref="customerJdbcDAO"></property>
<property name="purchaseDAO" ref="purchaseDAO"></property>
</bean>
<bean name = "customerAction" class="com.bjsxt.jlls.action.CustomerAction">
<property name="customerService" ref = "customerService"></property>
</bean>
</beans>
具体的类中也是创建对象赋值为null,get set 方法。
使用配置文件配置的好处是:由于软件设计的开闭原则当你软件上线后不是因为软件软件的bug源代码而是因为软件功能无法预期需求是不允许修改的。这个设计原则是在不修改源代码的前提下对软件功能进行扩展的目的。想要达到这个效果就要使用Spring的AOP原则。
例如:程序开始时使用的是Hibernate对dao层进行操作,后来感觉不够完善,改成用jdbc,不修改源代码的实现如下:继承加上重写save方法来实现,
同时<property name="customerDAO" ref="customerJdbcDAO"></property>
public class CustomerJdbcDAO extends CustomerDAO{
public void save(){
System.out.println("调用了JDBC方式实现的CustomerDAO.save()方法");
}
}



分享到:
评论

相关推荐

    spring3.0两种事务管理配置

    Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...

    spring获取weblogic jndi数据源的两种方式

    ### Spring 获取 WebLogic JNDI 数据源的两种方式 在Spring框架中,通过JNDI(Java Naming and Directory Interface)可以方便地访问WebLogic服务器中的数据源。这为应用程序提供了高度解耦的数据访问机制,使得...

    spring事务配置的五种方式

    1. **基于XML的全局事务配置**:这种方式通过在Spring配置文件中设置`&lt;tx:advice&gt;`和`&lt;aop:config&gt;`元素来实现事务管理。相比于第一种方式,这种方式更加简洁,适用于所有业务逻辑Bean。 2. **基于注解的事务配置**...

    spring aspect 配置2种方式

    本篇将详细介绍两种配置Spring Aspect的方式:XML配置和注解配置。 首先,我们来理解一下Spring AOP的基本概念。AOP提供了一种模块化机制,可以将横切关注点(如日志、性能监控、事务管理)从核心业务逻辑中分离...

    spring famework 配置启动方式

    本篇文章将深入探讨Spring Framework的两种主要配置启动方式:XML配置和注解配置,并通过具体的示例来阐述这两种方法。 首先,让我们从XML配置开始。在Spring早期版本中,XML配置是最常见的方式,它通过定义Bean的...

    spring-aop标签和配置文件两种方式实例

    综上所述,Spring AOP提供了通过XML配置和AOP标签两种方式来实现切面编程,帮助开发者更高效地组织代码,降低维护成本。无论选择哪种方式,理解切入点表达式、通知类型和切面的概念都是至关重要的。在Spring 2.5及...

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    本篇文章将详细讲解两种在Spring MVC框架中实现定时任务的方法:Spring MVC自带的定时器以及Quartz与Spring的集成。 首先,我们来看看Spring MVC自带的定时任务。Spring MVC作为Spring框架的一个模块,主要处理HTTP...

    J2EE mvc spring 配置

    Spring的配置主要分为XML配置和注解配置两种方式。XML配置文件中,开发者可以定义bean的实例化、依赖关系、属性值等。注解配置则允许开发者在类或方法上直接标注元数据,简化了配置过程。此外,Spring还提供了一个...

    使用Spring配置文件实现AOP

    在Spring中,AOP的实现依赖于两个主要组件:通知(Advice)和切点(Pointcut)。通知是实际执行的增强代码,如方法调用前的记录日志;切点是通知应该应用到的方法或类。Spring支持五种类型的的通知:前置通知...

    Spring的基本配置

    Spring的配置方式主要有两种:XML配置和Java配置。早期,XML配置是主流,而现在,随着Spring Boot的兴起,Java配置逐渐成为首选,因为它更加简洁和直观。不过,理解XML配置对于学习Spring的基础概念仍然十分必要。 ...

    spring定时器两种实现方式

    Spring 定时器两种实现方式 Spring 定时器是 Spring 框架中的一种组件,用于实现定时任务的执行。它提供了两种实现方式:Java Timer 定时和 Quartz 定时器。在本文中,我们将详细介绍这两种实现方式的原理、优点和...

    SpringAop两种配置demo

    Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对...了解并熟练掌握这两种配置方式,能够帮助我们更好地利用Spring AOP提高代码的可维护性和复用性。

    spring aop的两种配置方式.docx

    在Spring配置中,我们需要启用注解驱动的AOP支持: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop=...

    Spring事务配置的五种方式

    这种方式通过在Spring配置文件中使用`&lt;tx:advice&gt;`和`&lt;aop:config&gt;`元素来定义事务规则。 **示例配置代码**: ```xml (* com.bluesky.spring.service..*(..))"/&gt; *" propagation="REQUIRED"/&gt; ``` - ...

    spring aop demo 两种实现方式

    本示例提供了一种通过注解和配置文件两种方式实现Spring AOP的方法。 首先,我们来详细讲解通过注解实现Spring AOP。在Spring中,我们可以使用`@Aspect`注解来定义一个切面,这个切面包含了多个通知(advice),即...

    spring AOP配置的几种方式

    通过以上两种配置方式,我们可以看到Spring AOP提供了非常灵活且强大的功能。使用`ProxyFactoryBean`可以针对单个对象进行精确控制,而`DefaultAdvisorAutoProxyCreator`则更适合于自动化的场景,特别是当项目中有...

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...

    spring整合quartz两种方式以及spring自带定时任务使用

    在本文中,我们将探讨Spring与Quartz的两种整合方式以及Spring自身提供的定时任务功能。 ### Spring整合Quartz的方式 #### 1. 配置驱动的方式 这种方式主要是通过XML配置来创建和管理Quartz的Scheduler实例。首先...

    spring 下载与配置

    Spring的配置主要有两种方式:XML配置和Java配置。早期的Spring项目多采用XML配置,而现在更多地倾向于使用Java配置或者基于注解的配置,因为它们更直观且易于维护。 1. XML配置: 创建一个名为`...

Global site tag (gtag.js) - Google Analytics