Sping

一、什么是Spring

spring是一个full-stack(全栈式)轻量级开源框架。主要作用是创建和管理对象,实现解耦,简化开发。

二、Spring的核心

获取对象

在Spring的配置文件中,通过bean节点来实现对象的创建。

  1. 通过无参构造创建对象在这里插入图片描述
  2. 通过静态工厂getInstance( )创建对象(少用)
  3. 通过实例工厂创建对象(少用)
  4. 通过组件扫面和注解获得组件对象,在后面介绍

由Spring管理的对象的作用域

  • 单例:单一的实例,即在同一时刻,某个类的对象是唯一的!scope=“singleton”。
    • 懒汉式:默认,需要使用时,才创建。
    • 饿汉式:随着容器创建而创建,通过调整lazy-init=“true”。
  • 非单例:scope=“prototype”。

对象的生命周期

Spring对象管理的单例对象,存在则生命周期问题,开发者可以在任何自定义的、由Spring管理的类中添加初始化方法和销毁方法,方法必须是void和无参数的,例如:

public class Stduent {

    // 初始化方法
    public void init() {
        System.out.println("Student.init()");
    }

    // 销毁方法
    public void destroy() {
        System.out.println("Student.destroy()");
    }

}
<bean id="student"
    class="cn.tedu.spring.Student"
    init-method="init"
    destroy-method="destroy">
</bean>

IoC(控制反转)

使用spring框架后,创建对象将由传统的new语法改变为通过Spring容器获取对象,这就是IoC。
其中为了保证获取的对象是有值的,就需要用到DI(依赖注入)。

DI(依赖注入)

依赖注入通常有以下几种方式:

1.SET方式注入:为属性注入值时,如果类型是基本型,使用value进行配置,如果类型是引用,需要配置另一个bean来创建值的对象,然后通过ref进行配置。
  1. set方法参数为基本数据类型或String
    在这里插入图片描述
2.set方法参数为其他应用类型
在这里插入图片描述
3.set方法参数集合类型时(List , Set , Map , Properties)
<bean id="sampleBean"
    class="cn.tedu.spring.SampleBean">
    <property name="names">
        <list>
            <value>Jame</value>
            <value>Lucy</value>
            <value>David</value>
            <value>Tom</value>
            <value>Alex</value>
        </list>
    </property> 
</bean>
<property name="cities">
    <set>
        <value>Hangzhou</value>
        <value>Beijing</value>
        <value>Shanghai</value>
        <value>Shenzhen</value>
        <value>Guangzhou</value>
    </set>
</property> 
<property name="session">
    <map>
        <entry key="username" value="Jack"/>
        <entry key="password" value="1234"/>
        <entry key="from" value="Nanjing"/>
    </map>
</property>
//此为直接注入
<property name="dbConfig">
    <props>
        <prop key="name">Jack</prop>
        <prop key="age">18</prop>
    </props>
</property>

//或者先通过Spring容器扫描相应的properties文件,在进行注入

//如有个db.properties文件,其内容为
url=jdbc:mysql://192.168.0.251:3306/db_name?useUnicode=true&characterEncoding=utf8
driver=com.mysql.jdbc.Driver
username=root
password=root
initialSize=2
maxActive=10
//读取上述文件
<util:properties id="config"
    location="classpath:db.properties">
</util:properties>
//注入
<property name="dbConfig"
    ref="config">
</property>

2.自动装配
自动装配有多种,一种为byName,还有一种byType
在这里插入图片描述
3.(带参)构造方法注入(不常用)
在这里插入图片描述

Spring表达式

Spring表达式的基本格式是#{名称},用于表示某个值,甚至,值可以是来自另一个的某个属性!

当某个注入的属性值是通过Spring表达式得到的,则应该配置为value=#{}格式。

关于Spring表达式:

  • 如果获取另一个中的某属性值,则使用#{bean-id.属性名};

  • 如果获取另一个中的某List集合中的某个值,则使用#{bean-id.List集合名[索引]};

  • 如果获取另一个中的某Map集合中的某个值,则使用#{bean-id.Map集合名.key},
    还可以是#{bean-id.Map集合名[‘key’]}。

Spring注解(Annotation)

预备工作:开启组件扫描

在Spring的配置文件中添加:

<context:component-scan  base-package="cn.tedu.spring.dao" />
组件相关的注解(类前添加)
  • @Component :通用组件类
  • @Controller :控制器类
  • @Service :业务类
  • @Repository :数据访问类/持久层处理的类
作用域与生命周期相关的注解
  • @Scope(“singleton/prototype”)(类前添加)
  • @Lazy(“true/false”)(类前添加)
  • @PostConstruct(方法前添加)
  • @PreDestroy(方法后添加)
自动装配(属性前添加)
  • @Autowired(Spring框架环境)
  • @Resource(Java EE环境)

AOP(面向切面编程)

通俗的说,就是指定某些数据处理流程(甚至是所有数据处理流程)都会执行某些方法。
简单的AOP的实现:

@Component
@Aspect
public class TimeElapseAspect {

    @Around("execution(* cn.tedu.store.service.impl.*.*(..))")
    public Object doAround(
            ProceedingJoinPoint pjp) 
                throws Throwable {
        // 在业务方法之前执行的代码
        long start = System.currentTimeMillis();

        // 执行业务方法,表示执行任何一个应用范围之内的方法
        Object obj = pjp.proceed();

        // 在业务方法之后执行的代码
        long end = System.currentTimeMillis();
        System.err.println(
            "执行时间:" + (end - start) + "ms.");

        // 返回
        return obj;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值