什么是spring?

Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.

为何使用spring?

  1. 帮我们管理javabean
  2. IOCDI—Dependency injection  Inverse Object Control  Dependency Injection
  3. 轻量级框架
  4. 耦合度低

Spring两大核心内容简介

IOC:所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,

控制权的转移就是所谓反转。也叫DI,依赖注入,容器负责把依赖的具体对象注入到上层对象,而上层对象只需要提供一个接口声明。

类似于hibernate 一对多关系里面的inverse,把关系维护的重任交给对方,自己专心业务,与对方如何变化无关,全部由对方(spring容器)

来进行维护。

 

AOP:面向切面的编程。很多功能都要有这么一个业务,并且该业务对所有功能是基本一样的,可以考虑把该业务做成一个切面。

像servlet里的filter,Struts里的interceptor等都是一些好办法,aopspring提供的解决方案,他们的底层都是采用代理模式。

 

使用spring框架开发步骤

 

先到官方网站下载spring项目,采用3.x4.x均可。目前最好用最新的,我采用的4.1.5版本。

 

网址:

 

http://repo.springsource.org/libs-release-local/org/springframework/spring/

 

 

 

Spring开发典型步骤

 

  1. 创建工程
  2. 为工程添加springjar包和配置文件,按照具体需要添加,一般核心jar包需要加上
  3. 编辑配置文件(配置bean)

 注意文件名不要起错,  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="userDao" class="ytu.icoding.dao.UserDao"></bean>
<bean id="userAction" class="ytu.icoding.action.UserAction">
 <property name="dao" ref="userDao"></property>
 <!-- 该属性name要和关联类里自定义的属性名称对应起来 -->
</bean>
<bean id="user" class="ytu.icoding.entity.User">
  <constructor-arg name="name" value="张三"></constructor-arg>
  <constructor-arg name="age" value="18"></constructor-arg>
</bean>
</beans>

建立好要用到的测试类:

package ytu.icoding.dao;

public class UserDao {
  
    public void getUser(){
        System.out.println("I get a user");
    }
}
package ytu.icoding.action;

import ytu.icoding.dao.UserDao;

public class UserAction {
     private UserDao dao;
     
    public UserDao getDao() {
        return dao;
    }

    public void setDao(UserDao dao) {
        this.dao = dao;
    }

    public void getUser(){
        dao.getUser();        
    }
}
package ytu.icoding.entity;

public class User {
    private String name;
    private int age;
    public User(){}
    
    public User(String name, int age) {
        super();
        this.name = name;
        this.age = 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;
    }
    
}
package ytu.icoding.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ytu.icoding.action.UserAction;
import ytu.icoding.entity.User;
public class Test {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserAction user =(UserAction) ctx.getBean("userAction");
        user.getUser();
        System.out.println("-------------");
        User u =(User) ctx.getBean("user");
        System.out.println(u.getName());
        System.out.println(u.getAge());
        System.out.println("----------------");
            }
}

在配置文件中,采用了依赖注入为UserAction注入了UserDao,注意要在UserAction中声明UserDao属性并生成get,set方法,配置中

<property name="dao" ref="userDao"></property>    name,ref一定要对应好。

采用了构造方法为User注入了属性和对应的值value。

在类路径下寻找配置文件来实例化容器 

ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

方法二:

在文件系统路径下寻找配置文件来实例化容器 

ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\applicationContext.xml“});

Spring的配置文件可以指定多个,可以通过String数组传入。 

注意:

1.  Bean标签有个scope属性,取值分别是singleton,prototype,request,session

每一次采用spring框架获取javabean,方式分别是,永远一个实例,每次一个实例,每次请求一个实例,每次会话一个实例。

2. 实例化bean的三种方式:

(1.使用类构造器实例化

  <bean id="userService" class="com.jmt.service.impl.UserServiceBean"></bean>

(2.使用静态工厂方法实例化

 <bean id="userService2" class="com.jmt.service.impl.UserServiceBeanFactory" 

        factory-method="createUserServiceBean"/>

(3.使用实例工厂方法实例化:

 <bean id="userServiceFactory" class="com.jmt.service.impl.UserServiceBeanFactory"/>

   <bean id="userService3" factory-bean="userServiceFactory"  factory-method="createUserServiceBean2"/>

一般情况下用第一种。