HelloSpring(Spring学习笔记三)

本文介绍了如何在Spring中使用bean定义对象,通过控制反转和依赖注入原理,重构三层模式,并展示了如何通过XML配置文件进行对象管理。重点讲解了`ApplicationContext`的使用和Spring容器的工作原理。
摘要由CSDN通过智能技术生成

 一、使用Spring创建对象

        传统创建对象
        类型名 变量名 = new 类型();
        Hello hello = new Hello();

        使用Spring创建对象,在Spring中这些都称为bean
        id = 变量名
        class = new 的对象
        property 属性(属性名+赋值)


    <bean id="hello" class="com.ming.pojo.Hello">
        <property name="str" value="Spring"/>
    </bean>

hello对象是spring创建的,hello对象的属性是spring容器设置的 (而spring又是用到set注入取实现对象创建(而这些是通过用反射去完成的(反射核心:得到class类。反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制)))

可以在实体类中set方法看到其被spring使用反射机制调用的标志

这个过程就叫控制反转

控制:谁来控制对象的创建,传统是由程序本身创建,现在是用Spring创建

依赖注入:利用set方法来进行注入

IOC是一种编程思想,由主动编程到被动接收

new ClassPathXmlApplicationContext查看底层源码

二、测试

        //获取Spring 的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        //我们的对象都在Spring中管理了,我们要使用,直接到里面取
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());
//为什么创建的是classPathXmlApplicationContext返回的是一个ApplicationContext?

通过查看show diagrams(查看关系图)

 使用Spring重构之前的三层模式(直接加一个beans.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">
    <!--注意:Spring创建的是对象(实现类),接口是抽象类,不是一个对象-->
    <!--Spring创建dao对象-->
    <bean id="MySqlImp" class="com.ming.dao.UserDaoMySqlImp"/>
    <bean id="OracleImp" class="com.ming.dao.UserDaoOracleImp"/>
    <bean id="UserDaoImp" class="com.ming.dao.UserDaoImp"/>
    <bean id="SqlServerImp" class="com.ming.dao.UserDaoSqlServerImp"/>
    <bean id="RedisImp" class="com.ming.dao.UserDaoRedisImp"/>

    <!--Spring 创建service对象-->
    <bean id="ServiceImp" class="com.ming.service.UserServiceImp">
        <!--
        name 属性名:这里因为是业务层,属性也可以是一个接口,因为这些实现类都是实现了这个接口的
        ref 引用Spring容器中创建好的对象(通过id标识)
        value:具体的一个值,基本数据类型
        -->
        <property name="UserDao" ref="RedisImp"/>
    </bean>
</beans>
//测试这里相当于用户层
public class MyTest {
    public static void main(String[] args) {
//        老方法
//        //用户实际调用的是业务层
//        UserServiceImp userService = new UserServiceImp();
//        //思想就是加一层,在业务层加了一个方法,将改需求放到了用户层来实现
//        userService.setUserDao(new UserDaoSqlServerImp());
//        userService.getUser();
//=======================================================================================================
//        Spring容器防止创建好对象(像一个工厂),用户直接调用即可,也就是Spring接管了创建对象的任务
        //你只管调用(要哪个对象)就行,具体创建交给Spring

        //获取ApplicationContext(通过配置文件访问到Spring容器)
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        //容器在手,就像拿了菜单,点哪个菜(需要哪个对象),直接调用即可,餐厅厨师负责制作(创建对象),
        //Spring确实就像工厂模式(需要什么交给工厂,工厂负责创建对象,用户直接调用即可)
        UserServiceImp userServiceImp = (UserServiceImp) context.getBean("ServiceImp");
        userServiceImp.getUser();
}

//        小结:
//           由于对象都交给Spring容器管理了,所以要改创建对象的需求也是去Spring中改,不用去业务层改了
//           还要就是这是一个动态修改(也就不用停服务器,因为每停一次服务器都是极大的损失)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴空_V9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值