Spring学习

1.简介

Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。

maven依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.20</version>
</dependency>

Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的免费开源框架。

官方文档:Spring Framework 中文文档 - Spring Framework 5.1.3.RELEASE Reference | Docs4dev

2.IOC理论推导

原来实现业务:

UserDao

    public interface UserDao {
        void getUser();
    }

UserDaoImpl

    @Override
    public void getUser() {
        System.out.println("默认实现");
    }

UserService

    public interface UserService {
        void getUser();
    }

UserServiceImpl

    public class UserServiceImpl implements UserService{
        private UserDao userDao=new UserDaoImpl();
        @Override
        public void getUser() {
        userDao.getUser();
        }
    }

测试

public class Test {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        userService.getUser();
    }
}

那么如果此时 再添加一个业务

public class UserDaoMysqlImpl implements UserDao{

    @Override
    public void getUser() {
        System.out.println("Mysql实现");
    }
}

我们就需要去Service层去修改

private UserDao userDao=new UserDaoMysqlImpl();

这样的话,我们需要根据用户的需求去修改原代码,那么如果代码量十分巨大,会造成昂贵的成本。

我们使用set接口来实现:

private UserDao userDao;
    //利用set进行动态实现值的注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
public class Test {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        ((UserServiceImpl)userService).setUserDao(new UserDaoMysqlImpl());
        userService.getUser();
    }
}

之前,程序是主动创建对象,使用set注入之后,程序不再具有主动性,变为了被动的接受对象

ioc本质:控制反转(ioc)是一种思想,DI(依赖注入)是实现ioc的一种方法。

3.HelloSpring

实体类

package com.hongkai.pojo;

public class Hello {
    private String str;

    public Hello(String str) {
        this.str = str;
    }

    public Hello() {
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

1.配置元数据

基于 XML 的配置元数据的基本结构  resource/ApplicationContext.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来创建对象(bean)-->
    <bean id="hello" class="com.hongkai.pojo.Hello">
        <property name="str" value="Spring"></property>
    </bean>
</beans>

2.实例化容器

提供给ApplicationContext构造函数的位置路径是资源字符串,这些资源字符串使容器可以从各种外部资源(例如本地文件系统,Java CLASSPATH等)加载配置元数据

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
public class MyTest {
    public static void main(String[] args) {
        //获取Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        //现在对象都由Spring来管理了
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());
    }
}

 问题:Hello对象是谁创建的?Hello对象的属性怎么设置的?

之前我们new一个对象:类型 变量名=new 类型() Hello hello=new Hello();

现在我们交给Spring来做:使用bean标签 id=变量名 class=new 的对象 property相当于给对象中的属性设置一个值;

这个过程就是控制反转:

控制:控制对象的创建,传统的由程序本身来创建,使用Spring后,由Spring来创建

反转:程序本身不创建对象,而变成被动的接收对象

依赖注入:利用set方法来进行注入 如果实体类里没有set方法就无法给对象中的属性设置值

IOC是一种编程思想,由主动创建变成被动接收

4.IOC创建对象的方式

1.默认方式 使用无参构造器

2.有参构造器

    public User(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }

2.1构造函数参数索引

    <bean id="user" class="com.hongkai.pojo.User">
        <constructor-arg index="0" value="李四"/>
        <constructor-arg index="1" value="22"/>
    </bean>

 2.2构造函数参数类型匹配

    <bean id="user" class="com.hongkai.pojo.User">
        <constructor-arg type="String" value="王五"/>
        <constructor-arg type="int" value="42"/>
    </bean>

 2.3构造函数参数名称

    <bean id="user" class="com.hongkai.pojo.User">
        <constructor-arg name="userName" value="老六"/>
        <constructor-arg name="age" value="55"/>
    </bean>

 小总结:在配置文件加载的时候,容器中管理的对象就已经初始化了。

5.Spring配置

1.别名 alias

    <bean id="user" class="com.hongkai.pojo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值