spring入门详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/loveyouyuan/article/details/102516432

spring入门详解

spring的简介
Spirng框架是一个轻量级的解决方案,可以一站式构建企业级项目的应用,它是为了解决企业级开发的复杂性而创建的,Spirng使用了基本的JavaBean来完成以前只能由EJB才能完成的事情,然而Spring的用法不仅限制于服务器端的开发,从简单的,可测试性的和藕合度的角度来讲,任何应用都可以从spring中收益,Spring是一个轻量级的控制反转(Ioc)和面向切面的容器框架

spring的优势
1.降低了三层架构中之间的额耦合度
2.支持Aop,通过Aop思想可以完成声明式事务的处理,日志管理以及权限拦截等
3.可以和多种框架集合在一起
4.支持Juint测试

spring的入门程序的编写
1.导入相关的依赖(maven工程不叫jar包)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.ujiuye</groupId>
    <artifactId>ssm_day05_springbean</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <!--添加spring的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>

2.编写主配置文件,主要是对象的生成等具体内容实现,主要是将创建对象的方式改成由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来管理-->
    <!--spring的对bean的管理细节
         1.创建bean对象的3种方式
         2.bean对象的作用范围
         3.bean对象的生命周期
    -->

    <!--创建bean的三种方式-->
    <!--
       第一种方式:使用默认的构造方法来创建
       采用spring的配置文件中使用bean标签,配以id和class属性以后,且没有其他属性和标签的时候
       采用的就是这种默认的构造函数来创建bean对象,如果类中没有默认的构造方法,则无法创建

    <bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl"></bean>
    -->

    <!--第二种方法:使用普通的工厂中的方法创建对象(使用某个类的中方法来创建工厂,并存入到spring容器中)
        先实例化工厂类,然后再调用其相关的方法
    <bean id="instanceFactory" class="cn.ujiuye.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
    -->

    <!--第三种方式:使用工厂中的静态方法创建对象,(使用某个类的静态方法调用方法,刚创建的时候不会创建对象,是通过掉用方法的返回值,并存入到spring容器中)
    <bean id="accountService" class="cn.ujiuye.factory.StaticFactory" factory-method="getAccountService"></bean>
    -->

    <!--bean的作用范围
        bean的lazy-init=true" 指的是延迟节点的实例化,在使用的时候再实例化
        bean标签的scope属性
        作用:指定bean的作用的范围
            singleTon:单例的(默认的)
            prototype 多例的
            request   作用于web应用的请求范围
            session   作用于web应用的会话技术
            global-session  作用于集群环境的会话范围,当不死集群环境的时候,它既是session
    <bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl" scope="prototype"></bean>
    -->
    <!--bean对象的生命周期
        单例模式:
        出生:容器创建时对象出生  init-method="init"
        活着:容器还在,对象一直活着
        死亡:容器消亡,对象消亡  destroy-method="destory" 常把数据源关闭的方法配置到数据源销毁的方法里面
        总结:单例模式的生命周期和容器相同
        多例模式:
        出生:当我们使用对象的时,spring框架为我们创建
        活着:只要对象一直使用就一直在活着
        死亡:当对象长时间不用的时候,由java的垃圾回收装置回收
    -->
    <bean id="accountService" class="cn.ujiuye.service.impl.AccountServiceImpl"
              scope="singleton" init-method="init" destroy-method="destory"></bean>


</beans>

3.接口的创建,一般我们做业务都是调用我们写的各种接口

package cn.ujiuye.service;

/**
 * @author liugang
 * @date 2019/10/4
 * 账户的业务层接口
 */
public interface IAccountService {

    /**
     * 模拟保存账号
     */
   void saveAccount();
}

4.接口的实现类,实现接口对接口对象的实现等特点,方法在这里面实现,完成其相关的业务逻辑的编写

package cn.ujiuye.service.impl;


import cn.ujiuye.service.IAccountService;
/**
 * @author liugang
 * @date 2019/10/4
 * 账号的业务层实现类
 */
public class AccountServiceImpl implements IAccountService {

    public AccountServiceImpl(){
        System.out.println("对象创建了");
    }

    public void saveAccount() {
        System.out.println("service中的saveAccount的方法执行了");

    }

    /**
     * 初始化方法
     */
    public void init() {
        System.out.println("对象初始化了");

    }

    /**
     * 销毁方法
     */
    public void destory() {
        System.out.println("对象销毁了");

    }
}

5.编写测试类,实现对数相关的方法的实现

package cn.ujiuye.ui;


import cn.ujiuye.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author liugang
 * @date 2019/10/4
 * 模拟了一个表现层,用于调用业务逻辑层
 */
public class Client {

    public static void main(String[] args) {
        //1.获取核心容器对象    *****Bean对象在解析的时候就完成了实例化,一个节点一个节点的解析
        //ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2.根据id获取Bean对象
        IAccountService as = (IAccountService) ac.getBean("accountService");
        as.saveAccount();
        ac.close();

    }
}

猜你喜欢

转载自blog.csdn.net/loveyouyuan/article/details/102516432