Spring(1)

学习目标:

  • 了解Spring的概念
  • 了解IOC

学习内容:

  1. 掌握IOC的使用
  2. 创建Bean
  3. 学习spring知识

学习产出:

1、Spring的概念
Spring是一个基于控制反转Ioc和面向切面编程Aop的轻量级开源框架!
Spring之所以叫做Spring,就是它期望给传统臃肿的JavaEE带来一个春天!让我们的开发变得更加简单更加快速。
优点

  • 开源免费的轻量级框架
  • 低侵入式设计,代码污染极低
  • 支持事务的处理,对框架整合的支持
  • 以控制反转(IOC),面向切面编程(AOP)为内核
  • 方便解耦,简化开发:将对象的创建交给spring 无需new
  • 提供了展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多企业级应用技术
  • 能整合开源世界众多第三方框架和类库

2、IOC–控制反转

  • 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转,spring技术对IOC思想进行了实现
  • spring提供了一个容器–IOC容器,用来充当IOC思想中的“外部
  • IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean
  • DI 依赖注入–在容器中建立bean与bean之间的依赖关系的整个过程
    3、IOC使用步骤
    1)在pom.xml中导入spring-context坐标
    2)在rousources中创建ApplicationContext.XML,并配置bean

依赖引入
1)导入spring坐标

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>

2)定义spring管理的类(接口)

package com.it.service.impl;

import com.it.dao.BookDao;
import com.it.dao.impl.BookDaoImpl;
import com.it.service.BookService;

public class BookServiceImpl implements BookService {
    private BookDao bookDao=new BookDaoImpl();
    public void save(){
        System.out.println("bookService save");
        bookDao.save();
    }
}

package com.it.service;

public interface BookService {
    public void save();
}

3)创建spring配置文件,配置对应类作为spring管理的bean

<?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">
    <!--bean表示配置bean
    id属性表示给bean取名字
    class属性表示给bean定义类型-->
    <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl"></bean>
    <bean id="bookService" class="com.it.service.impl.BookServiceImpl"></bean>
</beans>

4)初始化IOC容器,通过容器来获取bean

package com.it.service;

import com.it.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //获取IOC容器
        ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        //获取bean
    BookDao bookDao=(BookDao) ctx.getBean("bookDao");
    bookDao.save();
    }
}

3、DI入门
1)删除使用new的形式创建的代码,提供对应的setter方法


public class BookServiceImpl implements BookService {
//    private BookDao bookDao=new BookDaoImpl();
//    删除业务层中使用new方式创建的dao对象
    private BookDao bookDao;
    public void save(){
        System.out.println("bookService save");
        bookDao.save();
    }
//提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

2)配置service与dao之间的关系

   <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl"></bean>
    <bean id="bookService" class="com.it.service.impl.BookServiceImpl">
<!--        配置server与dao的关系-->
<!--        property标签表示配置当前bean的属性-->
<!--        name属性表示配置哪一个具体的属性-->
<!--        ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
    </bean>

**注意

 <property name="bookDao" ref="bookDao"/>

name=“bookDao”**在这里插入图片描述
ref=“bookDao”在这里插入图片描述
4、bean配置
1)基础配置

<bean id="bookDao" class="com.it.dao.impl.BookDaoImpl"></bean>

2)别名配置
name可以设置多个名称

<bean id="bookDao" name="bookDao1, bookDao2" class="com.it.dao.impl.BookDaoImpl"></bean>

3)作用范围配置
prototype:多例
singleton:单例

<bean id="bookService" class="com.it.service.impl.BookServiceImpl" scope="prototype"/>

5、实例化bean的三种方式
1)构造方法(无参)
无参构造方法如果不存在, 将抛出异常BeanCreationException

public class BookServiceImpl implements BookService {
    public BookServiceImpl() {
        System.out.println("book service save...");
    }
}

2、静态工厂
1)

public class BookDaoImpl implements BookDao {
    public static BookDao getBookDao(){
        return new BookDaoImpl();
    }
}

2)配置

 <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl" scope="singleton" factory-method="getBookDao"></bean>

3、使用实例工厂实例化bean
1)

public class BookDaoImpl implements BookDao {
    public BookDao getBookDao(){
        return new BookDaoImpl();
    }}

2)配置

  <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl" ></bean>
  <bean id="dao" factory-method="getBookDao" factory-bean="bookDao" ></bean>

在这里插入图片描述

在这里插入图片描述
6、bean的生命周期

  • 初始化容器
    1、创建对象(内存分配)
    2、执行构造方法
    3、执行属性注入(set操作)
    4、执行bean初始化方法
  • 使用bean
    1、执行业务操作
  • 关闭/、销毁容器
    1、执行bean销毁方法
    在这里插入图片描述

1)配置生命周期控制方法

public class BookDaoImpl implements BookDao {
    public void init() {
        System.out.println("bookdao init");
    }
    public void destory() {
        System.out.println("bookdao destory");
    }
}
    <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"></bean>

在这里插入图片描述
2)使用接口控制

public class BookServiceImpl implements BookService , InitializingBean, DisposableBean {
    public void save(){
        System.out.println("bookService save");
        bookDao.save();
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("service destory");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("service afterPropertiesSet");
    }
}

在这里插入图片描述
7、setter注入
1)简单类型
定义可访问的set方法

public class BookDaoImpl implements BookDao {
    private Integer num;
    private String name;

    public void setNum(Integer num) {
        this.num = num;
        System.out.println(num);
    }

    public void setName(String name) {
        this.name = name;
        System.out.println(name);
    }

    @Override
    public void save() {
System.out.println("bookdao save");
    }
}

配置

<bean id="bookDao" class="com.it.dao.impl.BookDaoImpl">
        <property name="name" value="zs"></property>
        <property name="num" value="10"></property>
    </bean>

8、构造器注入
1)引用类型

public class BookServiceImpl implements BookService , InitializingBean, DisposableBean {
//    private BookDao bookDao=new BookDaoImpl();
//    删除业务层中使用new方式创建的dao对象
    private BookDao bookDao;
    private UserDao userDao;

    public BookServiceImpl(BookDao bookDao, UserDao userDao) {
        this.bookDao = bookDao;
        this.userDao = userDao;
    }
    public void save(){
        System.out.println("bookService save");
        bookDao.save();
        userDao.save();
    }
}
<!--    构造器注入-->
    <bean id="bookDao" class="com.it.dao.impl.BookDaoImpl"></bean>
    <bean id="userDao" class="com.it.dao.impl.UserDaoImpl"></bean>

    <bean id="bookService" class="com.it.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"></constructor-arg>
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>

2)简单类型

public class BookDaoImpl implements BookDao {
    private Integer num;
    private String name;

    public BookDaoImpl(Integer num, String name) {
        this.num = num;
        this.name = name;
    }
}

配置

<bean id="bookDao" class="com.it.dao.impl.BookDaoImpl">
        <constructor-arg name="name" value="zs"></constructor-arg>
        <constructor-arg name="num" value="10"></constructor-arg>
    </bean>

9、自动装配

//按名称
    <bean id="userDao" name="userDao" class="com.it.dao.impl.UserDaoImpl" autowire="byName"></bean>
    //按类型--主要用
    <bean id="userDao" class="com.it.dao.impl.UserDaoImpl" autowire="byType"></bean>

10、集合注入

public class UserDaoImpl implements UserDao {
    @Override
    public void save() {

    }
    private int[] array;
    private List<String> list;
    private Set<String> set;
    private Map<String,String> map;
    private Properties properties;

    public void setArray(int[] array) {
        this.array = array;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }
}

public class App2 {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext2.xml");
        UserDao userDao=(UserDao) ctx.getBean("UserDao");
        userDao.save();
    }
}

<bean id="userDao" class="com.it.dao.impl.UserDaoImpl">
    <property name="array">
    <array>
        <value>100</value>
        <value>200</value>
        <value>300</value>
    </array>
    </property>
    <property name="list">
        <list>
            <value>itcast</value>
            <value>mashang</value>
            <value>chuang</value>
        </list>
    </property>
    <property name="set">
        <set>
            <value>itcast</value>
            <value>mashang</value>
<!--            重复只保留一个-->
            <value>chuang</value>
            <value>chuang</value>
        </set>
    </property>
    <property name="map">
        <map>
            <entry key="country" value="china"></entry>
            <entry key="province" value="fujian"></entry>
            <entry key="city" value="putian"></entry>
        </map>
    </property>
    <property name="properties">
        <props>
            <prop key="country">china</prop>
            <prop key="province">fujian</prop>
            <prop key="city">putian</prop>
        </props>
    </property>
</bean>

11、加载properties文件
1)开启context命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       
       http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--    开启一个全新的命名空间context-->
</beans>
<!--    使用context加载properties 文件-->
    <context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>
<!--使用属性占位符${}读取properties文件中的属性-->
    <bean class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
//jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root

在这里插入图片描述
12、容器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringSpring Cloud是两个相关的框架。Spring是一个开源的Java框架,用于构建Java应用程序。它提供了许多模块和工具,可以帮助开发者更轻松地构建企业级应用程序。Spring Boot是Spring框架的一部分,它是一个快速配置脚手架,可以帮助开发者快速搭建Spring应用程序。Spring Boot可以独立使用,也可以与Spring Cloud一起使用。 Spring Cloud是一个云端分布式架构解决方案,它是基于Spring Boot构建的。它提供了一系列的组件和工具,用于简化开发分布式系统的任务,比如服务发现、服务注册、负载均衡、配置管理等。Spring Cloud依赖于Spring Boot,因此无法独立使用,它扩展了Spring Boot的功能,使开发者可以更方便地构建和管理微服务架构。 总结起来,Spring Boot是一个快速配置脚手架,用于开发单个微服务,而Spring Cloud是基于Spring Boot的云应用开发工具,用于构建和管理分布式系统。Spring Cloud依赖于Spring Boot,因此需要在Spring Boot的基础上进行扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【微服务系列】Spring SpringMVC SpringBoot SpringCloud概念、关系及区别](https://blog.csdn.net/weixin_33700350/article/details/93831564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值