spring介绍;安装;使用

介绍

spring是一个轻量级的Java 开发框架。实现了 高内聚,低耦合;支持AOP(面向切面),控制反转(IOC)也叫依赖注入(Dependency lnjection),声明事务 整合其它ORM框架 等

IOC,控制反转(依赖注入,依赖查找): 应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的,控制权就由应用转移到了外部容器,控制权的转移就是控制反转。

依赖注入(Dependency lnjection) 在运行期间,由外部容器动态的将依赖对象注入到组件中

 bean:所有的实例,对象 在IOC容器中都能称之为bean

Spring主要的优点
1.低侵入式设计,代码的污染率。
2.控制反转(Ioc)机制,也叫依赖注入(DI),降低了业务对象替换的复杂性,提高了组件之间的解耦。
3.面向切面(AOP),允许将一些通用的任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用。
4.Spring的ORM 和 DAO 提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
5.独立于各种应用服务器,基于Spring框架的应用程序,可以实现Write Once,Run Anywhere的承诺。
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

在pom.xml中 添加 maven依赖

<dependencies>
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        </dependency>
    <dependency>  
            <groupId>commons-logging</groupId>  
            <artifactId>commons-logging</artifactId>  
            <version>1.2</version>  
    </dependency>
</dependencies>

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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- spring配置文件 -->
    <bean id="方法名" class="包名.类名"></bean>
</beans>

 实例化spring容器
Spring的配置文件可以指定多个,通过string数组传入


1.在类路径下寻找配置来实例化容器
AppplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});


2.在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});

 

实例化bean
1.使用类构造器实例化
<bean id="carService" class="com.serviceImpl.CarServiceBean"></bean>

2.使用静态工厂方法实例化
<bean id="carService2" class="test.CarServiceBeanFactory" factory-method="createCarBean"></bean>


public class CarServiceBeanFactory {
    public static CarServiceBean createCarBean(){
        return new CarServiceBean();
    }
}
3.使用实例化工厂方法实例化
<bean id="carService" class="test.CarServiceBeanFactory"></bean>
<bean id="carService3" factory-bean="carService" factory-method="createCarBean2"></bean>
    
public class CarServiceBeanFactory {
    public CarServiceBean createCarBean2(){
        return new CarServiceBean();
    }
}

 

在每个spring IOC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动初始化bean,
但可以指定bean节点lazy-init="true"延迟初始化bean,这时 只有第一次获取bean会初始化bean
如果想对所有bean都启用应用延迟初始化,可在根节点bean设置 default-lazy-init="true"

 

bean作用域

singleton (单例模式,默认) 在整个springIOC容器中,使用singleton定义的bean将只有一个实例
prototype 原形模式,每次通过容器的getBean方法获取prototype定义的bean,都会产生一个新的bean实例
request 对于每次HTTP请求,使用request定义的Bean都将产生一个新的实例,每次HTTP请求都将产生不同的Bean实例,该作用域仅在给予web的Spring ApplicationContext情形下有效
session 对于每次HTTP Session ,使用session定义的Bean都将产生一个新实例,该作用域仅在给予web的Spring ApplicationContext情形下有效
global session 每个全局得HTTP Session对应一个Bean实例,该作用域仅在给予web的Spring ApplicationContext情形下有效

 

spring依赖注入方式:set注入,构造器注入,静态工厂注入,实例工厂注入 (只写用的最多的注入方式)
 set注入:

package com.dao;

public interface CarDao {
    public void append(String arg);
}
CarDao
package com.dao.Impl;

import com.dao.CarDao;

public class CarDaoImpl implements CarDao {
    //数据库保存操作层
    public void append(String args) {
        System.out.println("CarDaoImpl"+args);
    }

}
CarDaoImpl
package com.service;

public interface CarService {
    public void add(String args);
}
CarService
package com.serviceImpl;

import com.dao.CarDao;
import com.service.CarService;

public class CarServiceImpl implements CarService {
    private CarDao carDao;
    
    public CarDao getCarDao() {
        return carDao;
    }
    //注入
    public void setCarDao(CarDao carDao) {
        this.carDao = carDao;
    }
    
    @Override
    public void add(String args) {
        // 业务操作层
        System.out.println("CarServiceImpl"+args);
        args = args+":"+this.hashCode();
        carDao.append(args);
    }

}
CarServiceImpl
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.service.CarService;

public class RunTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        CarService carService = (CarService) context.getBean("carServer");
        carService.add("test");
        
    }
}
RunTest
<?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="carServer" class="com.serviceImpl.CarServiceImpl">
          <property name="carDao" ref="carBean"></property>
      </bean>
    
    <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean>

</beans>
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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
      <bean id="carServer" class="com.serviceImpl.CarServiceImpl">
          <constructor-arg name="carDao" ref="carBean"></constructor-arg>
      </bean>
    
    <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean>

</beans>
applicationContext.xml
package com.serviceImpl;

import com.dao.CarDao;
import com.service.CarService;

public class CarServiceImpl implements CarService {
    private CarDao carDao;
    public CarServiceImpl(CarDao carDao) {
        this.carDao = carDao;
    }
/*    public CarDao getCarDao() {
        return carDao;
    }
    //注入
    public void setCarDao(CarDao carDao) {
        this.carDao = carDao;
    }
*/    
    @Override
    public void add(String args) {
        // 业务操作层
        System.out.println("CarServiceImpl"+args);
        args = args+":"+this.hashCode();
        carDao.append(args);
    }

}
CarServiceImpl

 

posted @ 2017-08-16 18:01  翔运  阅读(575)  评论(0编辑  收藏  举报