javaSSM框架—spring实现过程

17 篇文章 0 订阅
17 篇文章 0 订阅

spring框架

Spring框架概述:

Spring是一个Service层的框架,可以整合许多其它框架进行工作。
Spring的主要技术是 IOC(DI) 、AOP
IOC(DI) - 控制反转(依赖注入)
AOP - 面向切面编程
spring下载地址:https://spring.io

spring核心模块:

IOC(DI) - 控制反转(依赖注入)
所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要时由Spring框架提供,这个由spring框架管理对象创建和生命周期的机制称之为控制反转。而在 创建对象的过程中Spring可以依据配置对对象的属性进行设置,这个过称之为依赖注入,也即DI。

入门练习:

创建Spring的配置文件
Spring采用xml文件作为配置文件,xml文件名字任意,但通常都取名为applicationContext.xml,通常将该文件放置在类加载的目录里下(src目录),方便后续使用。
1.创建bean类,并在spring中进行配置交由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-3.2.xsd">
        
        <bean id="person" class="cn.tedu.beans.Person"></bean>
        
</beans>

在程序中通过Spring容器获取对象并使用

public class Person_Test {
  @Test
  /**
  * SpringIOC的入门案例
  */
 public void  test1(){
 ApplicationContext context = 
 new ClassPathXmlApplicationContext("applicationContext.xml");
    Person p = (Person) context.getBean("person");
    p.say();
    }
}
IOC的实现原理

在初始化一个Spring容器时,Spring会去解析指定的xml文件,当解析到其中的标签时,会根据该标签中的class属性指定的类的全路径名,通过反射创建该类的对象,并将该对象存入内置的Map中管理。其中键就是该标签的id值,值就是该对象。
之后,当通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中寻找是否有匹配的键值,如果有则将该键值对中保存的对象返回,如果没有匹配到则抛出异常。
由此可以推测而知:
默认情况下,多次获取同一个id的bean,得到的将是同一个对象
即使 是同一个类,如果配置过多个标签具有不同的id,每个id都会在内置Map中有一个键值对,其中的值是这个类创建的不同的对象
同一个标签下不允许配置多个同id的标签,如果配置则启动抛异常

IOC获取对象的方式:

通过context.getBeans()方法获取bean时,可以通过如下两种方式获取:
传入id值
传入class类型
通过class方式获取bean时,如果同一个类配置过多个bean,则在获取时因为无法确定到底要获取哪个bean会抛出异常
而id是唯一的,不存在这样的问题,所以建议大家尽量使用id获取bean

@Test
/**
 * SpringIOC获取bean的方式
 */
public void  test3(){
        /*
         <bean id="person" class="cn.tedu.beans.Person"></bean>
         */
        /*
         <bean id="person" class="cn.tedu.beans.Person"></bean>
         <bean id="personx" class="cn.tedu.beans.Person"></bean>
         */
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //--通过id获取
        Person p1 = (Person) context.getBean("person");
        p1.say();
        //--通过class获取
        Person p2 = context.getBean(Person.class);
        p2.say();
}

SpringIOC在通过class获取bean时,如果找不到该类型的bean还会去检查是否存在该类型的子孙类型的bean,如果有则返回,如果找不到或找到多个则抛出异常。这符合java面向对象思想中的多态的特性。

@Test
public void test02() {
//1.初始化spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取Bean
JavaTeacher jt = (JavaTeacher) context.getBean(Teacher.class);
System.out.println(jt);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值