浅谈Spring(一)

浅谈Spring(一)

Spring介绍

Spring认证框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 .

概念:

J2EE:java企业级开发

J2SE:java基础语法

J2ME:java移动端开发(已经淘汰),现金最多的是安卓以及ios

bean:由Spring管理的对象就是bean对象

轻量级容器:使用较为简单便捷,在内存中开辟一块空间储存和管理bean对象

**总结:**Spring是一个开源的轻量级的J2EE框架,用来管理bean的生命周期的容器

接下来通过实例看一看Spring如何帮我们创建并管理对象的

在没有学习Spring之前我们是这样写代码的

创建Dog类

public class Dog {
    public void say(){
        System.out.println("旺旺");
    }
}

创建Cat类

public class Cat {
    public void say(){
        System.out.println("妙妙");
    }
}

创建Host类

public class Host {
    private static Dog dog = new Dog();

    public static void main(String[] args) {
        dog.say();
    }
}

大家思考一个问题,这段代码有什么不妥之处?

现在主人就养了一直宠物狗,那么以后养一只宠物猫该怎么办?是不是需要再new一个cat对象,在调用方法,这样的代码耦合性太高,后期也不容易维护,以后再养别的宠物就需要一直修改代码

优化:

宠物狗和宠物猫还有以后宠物猪什么的,归根结底都是宠物,我们可以把宠物共同的特性提取出来,写一个接口,这样就解决了上述的问题

创建接口Pet

public interface Pet {
    void say();
}

将Dog和Cat实现此接口

public class Dog implements Pet{
    public void say(){
        System.out.println("旺旺");
    }
}

public class Cat implements Pet{
    @Override
    public void hello() {
        System.out.println("猫");
    }
}

修改Host类

public class Host {
    private static Pet pet = new Cat();

    public static void main(String[] args) {
        pet.say();
    }
}

根据多态的原则,我们只需要new想要的宠物即可,就不用再重新new对象了.这就是面向接口思想,但是还是需要我们创建对象,对象和对象之间还是有耦合性,所以这时候我们就需要一个东西帮助我们创建对象并管理对象了.

Spring-IOC

IOC(Inversion Of Control):即控制反转,意思是将对象的创建管理权交给Spring容器,我们不在关注对象的创建和管理,把这些都交给第三方,Spring容器来做,完全实现了松耦合.

IOC案列

创建Pet接口

public interface Pet {
    void say();
}

创建Dog类

public class Dog implements Pet {
    @Override
    public void say() {
        System.out.println("旺旺");
    }
}

配置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">

    <!--1. IOC的机制管理Dog对象
        id: 对象的唯一标识符. 不能重复 见名知意 首字母小写
        class: 类路径
    -->
    <bean id="dog" class="com.qty.demo2.Dog"></bean>

</beans>

bean标签中的重要属性:

id:对象的唯一标识符,不能重复,见名知意,首字母小写

class:类的全路径,意思就是要让这个类被Spring管理

编辑User类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class User {
    public static void main(String[] args) {
        // 指定配置文件
        String resource = "spring.xml";
        // 创建容器对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext(resource);
        Dog dog = context.getBean(Dog.class);
        dog.say();
    }
}

1.指定xml配置文件

2.创建容器对象

3.通过容器对象调用getBean方法创建对象,通过反射机制完成

IOC实现原理

容器的数据结构是K-V,也就是Map结构,K=bean中的id,V=实例化对象

程序执行过程

1.指定xml配置文件

2.Spring容器记载配置文件,扫描bean标签时,开始创建对象

3.首先根据class属性的值,获取类型的路径, 之后通过反射机制创建对象,必须有无参构造

4.bean中的id当作Map中的key,实例化的对象当作是value,Spring启动成功

5.当用户需要对象时,可以通过id/类型获取.

Spring注解开发

上述我们通过xml配置文件的方法,实现了不new对象而让Spring帮我们创建对象的操作,随着java注解的流行,现在Spring注解开发是比较简单快捷的.

创建配置类

配置类:作用和xml配置文件类似,我们需要在配置类中加一些注解

注解:作用就是标识/标记

import com.qty.demo2.Dog;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan("com.qty.demo2")
public class SpringConfig {

    @Bean
    public Dog dog(){
        return new Dog();
    }
}

注解说明:

@Configuration:标明这是一个配置类

@ComponentScan(“类路径”):扫描该路径,使注解生效

编辑测试类

public class User {
    public static void main(String[] args) {
//        // 指定配置文件
//        String resource = "spring.xml";
//        // 创建容器对象
//        ApplicationContext context =
//                new ClassPathXmlApplicationContext(resource);
//        Dog dog = context.getBean(Dog.class);
//        dog.say();
        ApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        Dog dog = context.getBean(Dog.class);
        dog.say();
    }
}

通过对比,注解开发比xml配置文件要简单很多.

一些概念

1.单例对象和多例对象

单例对象指,Spring容器只有一份对象,默认是单例的

多例:Spring容器中创建多个对象

需要注解:@Scope(“singleton”)单例/@Scope(“prototype”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值