Spring--优秀的框架第一步

本文介绍了Spring框架,它能方便解耦、支持AOP编程和声明式事务,还阐述了控制反转和依赖注入概念。接着给出Spring初体验步骤,讲解了Bean的常用配置,如id、name、class和作用范围。最后介绍三种实例化Bean的方式,包括类构造器、静态工厂方法和实例工厂方法。

什么是Spring?

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
简述
1、方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
2、AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能
3、声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
优点:

  • 所有的依赖关系被集中统一的管理起来,清晰明了
  • 每个类只需要关注于自己的业务逻辑
  • 修改依赖关系将是一件很容易的事情

Spring需要的jar

  • spring-beans
  • spring-context
  • spring-core
  • spring-expression
  • commons-logging

控制反转、依赖注入的概念

IOC(Inverse of Control) 控制反转的概念,就是将原本中手动创建对象的控制权交给了Spring框架管理。即创建对象控制权被反转到了Spring框架

DI(Dependency Injection) 依赖注入的概念,就是在Spring创建这个对象过程中,将这个对象所依赖的属性注入进去。

spring初体验

1、导入相关jar包
2、创建resources文件夹,将其设置为Resources Root文件夹
创建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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
   </beans>

3、新建java文件夹,并将其设置为Sources Root文件夹。创建包,在包下新建UserService接口,随便写个方法,这里写个sayHello()方法。

public interface UserService {
    public  void sayHello();

}

4、在包下新建UserService的实现类UserServiceImpl。这里调用sayHello打印一句话

public class UserServiceImpl implements UserService {
    //依赖的属性
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sayHello() {
        System.out.println("Hello Spring "+name);
    }
}

5、回到配置文件applicationContext.xml中,添加如下代码

    <!--UserService的创建权交给了Spring-->
    <bean id="userService" class="com.ioc.demo1.UserServiceImpl">
     <!--设置属性-->
     <property name="name" value="张三"/>
    </bean>

6、测试类,几种方法对比。

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;

/**
 * 测试类
 */
public class SpringDemo1 {
    @Test
    /**
     * 传统方式
     */
    public void Demo1(){
        UserService userService = new UserServiceImpl();
        userService.sayHello();
    }

    @Test
    /**
     * Spring的方式实现
     */
    public void Demo2() {
        //创建Spring的工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过工厂获得类:
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.sayHello();
    }

    @Test
    /**
     * 读取磁盘系统中的配置文件
     */
    public void demo3(){
        //创建spring的工厂类
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("f:\\applicationContext.xml");
        //通过工厂获得类:
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.sayHello();
    }

    @Test
    /**
     * 传统方式的工厂类:BeanFactory
     */
    public void demo4(){
        //创建工厂类
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

        //通过工厂获得类:
        UserService userService = (UserService) beanFactory.getBean("userService");
        userService.sayHello();
   }
   
    @Test
    /**
     * 传统方式的工厂类:BeanFactory
     */
    public void demo5(){
        //创建工厂类
        BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("f:\\applicationContext.xml"));
        //通过工厂获得类:
        UserService userService = (UserService) beanFactory.getBean("userService");
        userService.sayHello();
    }

}

Bean的常用配置

id和name:
一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称
id属性在ioc容器中必须是唯一的
如果Bean的名称中含有特殊字符,就需要使用name属性

class
class 用于设置一个类的完全路径名称,主要作用是IOC容器生成类的实例

Bean作用范围
默认单例模式 scope=“singleton”
多例:scope=“prototype”

三种实例化Bean的方式

1、 使用类构造器实例化(默认无参数)
2、 使用静态工厂方法实例化(简单工厂模式)
3、 使用实例工厂方法实例化(工厂方法模式)

1、使用类构造器实例化(默认无参数)
创建一个类

/**
 * Bean的实例化的三种方式一,采用无参数的构造方法的方式
 */
public class Bean1 {
    public Bean1(){
        System.out.println("Bean被实例化了");
    }
}

配置文件

<!--第一种:无参构造器-->
    <bean id="bean1" class="com.ioc.demo2.Bean1"/>

测试

 @Test
    public void demo1(){
        //创建工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过工厂获得类的实例
        Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
    }

2、 使用静态工厂方法实例化(简单工厂模式)
创建一个类Bean2

public class Bean2 {

}

创建Bean2静态工厂

**
 * Bean2的静态工厂
 */
public class Bean2Factory {
    public  static Bean2 createBean2(){
        System.out.println("Bean2Factory的方法已经执行了");
        return new Bean2();
    }
}

配置文件

<!--第二种方式:静态工厂的方式-->
    <bean id="bean2" class="com.ioc.demo2.Bean2Factory" factory-method="createBean2"/>

测试

@Test
    public void demo2(){
        //创建工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
    }

3、 使用实例工厂方法实例化(工厂方法模式)
新建类Bean3

/**
 * 实例化Bean的第三种方式,实例工厂实例化
 */
public class Bean3 {
}

新建Bean3实力工厂类Bean3Factory


/**
 * Bean3的实例工厂
 */
public class Bean3Factory {
public Bean3 createBean3(){
    System.out.println("Bean3Factory被执行了");
    return new Bean3();
}
}

配置文件

    <!--第三种方式:实例工厂的方式-->
    <bean id="bean3Factory" class="com.ioc.demo2.Bean3Factory"/>
    <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>

测试

    @Test
    public void demo3(){
        //创建工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值