代码编织梦想

1、什么是Spring?

Spring是一款轻量级开源框架

IoC(Inverse Of Control:反转控制)通过配置的方式,将对象的管理控制权交给spring容器,spring得到具体的包路径,类路径通过反射的方式,创建对象。

AOP(Aspect Oriented Programming:面向切面编程),运行期通过动态代理方式,在方法的前后加入相应的通知(日志,权限等)

Spring的体系机构

2、Spring的配置文件

Bean标签基本属性配置:

id:Bean实例在Spring容器中的唯一标识

class:Bean的全限定名称

scope:指对象的作用范围

  • singleton为单例:容器只有一个对象,当Spring核心文件被加载时,实例化配置的Bean实例,
  • prototype为多例,容器有多个对象,当调用getBean()方法时实例化Bean,当对象长时间不使用时,被GC垃圾回收器回收

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法名称

3、Spring入门

开发步骤

①导入 Spring 开发的基本包坐标
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.3.RELEASE</version>
        </dependency>
    </dependencies>
②编写 Dao 接口和实现类
public interface UserDao {  
    public void save();
}

public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("save running....");
    }
}
③创建 Spring 核心配置文件

在类路径下(resources)创建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">

</beans>
④在 Spring 配置文件中配置 UserDaoImpl
<?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 id="userDao" class="cn.guixinchn.dao.impl.UserDaoImpl"></bean>
</beans>
⑤使用 Spring 的 API 获得 Bean 实例
public class test {
    @Test
    public void test1(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
    }
}

4、Bean的依赖注入配置

依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现

①set方法注入

​ 创建UserServer接口和UserServerImpl实现类

通过Spring配置文件的方式

public interface UserServer {
    public void save();
}

public class UserServerImpl implements UserServer {

    public void save() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl"></bean>

通过配置set方式

public class UserServerImpl implements UserServer {
    
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    public void save() {
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

②构造方法注入

public class UserServerImpl implements UserServer {

    private UserDao userDao;

    public UserServerImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl">
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

引用数据类型例子

​ 如上

普通数据类型例子

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="name" value="张三"></property>
    <property name="age" value="18"></property>
</bean>

集合数据类型例子

<property name="strList">
	<list>
        <value>aaa</value>
        <value>bbb</value>
        <value>ccc</value>
    </list>
</property>
<property name="userMap">
    <map>
        <entry key="a" value-ref="aaa"/>
        <entry key="b" value-ref="bbb"/>
    </map>
</property>
<property name="properties">
    <props>
        <prop key="a">aaa</prop>
        <prop key="b">bbb</prop>
        <prop key="c">ccc</prop>
    </props>
</property>

5、分模块开发

可以把配置文件分出来,在Spring主配置文件通过import标签进行加载

<import resource="applicationContext-xxx.xml"/>

6、Srping配置数据源

1、导入数据库连接需要的依赖坐标

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>

2、创建jdbc.properties连接参数

在resources目录下新建一个jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456

3、主配置文件抽jdbc配置文件

applicationContext.xml加载jdbc.properties配置文件获得连接信息。

首先,需要引入context命名空间和约束路径:

  • 命名空间:xmlns:context=“http://www.springframework.org/schema/context”
  • 约束路径:http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
<!--Spring容器加载properties文件-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"></property>
    <property name="jdbcUrl" value="${jdbc.url}"></property>
    <property name="user" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

4、测试

    @Test
    public void test3() throws SQLException {
        //获取配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //拿到数据源
        DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");
        //获得连接对象
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

7、Srping相关API

ApplicationContext的继承体系

applicationContext:接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象

ApplicationContext的实现类

  1. ClassPathXmlApplicationContext:通过类的根路径下加载配置文件
  2. FileSystemXmlApplicationContext:从磁盘路径上加载配置文件
  3. AnnotationConfigApplicationContext:使用注解配置容器对象时,此类来创建 spring 容器读取注解

getBean()方法使用

当参数的数据类型是字符串时,表示根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。

当参数的数据类型是Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/guixinchn/article/details/111105434

第三天 —— 运算符-爱代码爱编程

种类及总览 算数运算符关系运算符逻辑运算符赋值运算符位运算符条件运算符字符串连接运算符其他运算符算数运算符 运算符:+、-、*、/、%、++、–重点掌握 ++ 和 --++ 可以出现在变量前,也可以出现在变量后++出现在变量后:会先做赋值运算,再自加一出现在变量前:会先自加一,在做赋值运算关系运算符 运算符:>、>=、<、&l

MySQL高级查询与编程笔记 • 【第4章 MySQL编程】-爱代码爱编程

全部章节   >>>> 本章目录 4.1 用户自定义变量 4.1.1 用户会话变量 4.1.2 用户会话变量赋值 4.1.3 重置命令结束标记 4.1.4 实践练习 4.2 存储过程 4.2.1 局部变量 4.2.2 存储过程介绍 4.2.3 创建和执行存储过程的语法 4.2.4 不带参数存储过程 4.2.5

《张三记录-java》string类型、二进制十进制-爱代码爱编程

字符串类型 String: String不是基本数据类型,属于引用数据类型使用方式与基本数据类型一致4。例如:String str = “张三李四dw”;一个字符串可以串接另一个字符串,也可以串接其他类型的数据。注意使用: Strig属于引用数据类型 字符串声明String类型变量时,使用""String可以和8种基本数据类型做运算,且运算只能是连接运

深度剖析Java集合之Stack-爱代码爱编程

一. Stack 初识 Java 集合框架提供了一个集合Stack,它提供了stack 数据结构的功能 1. stack 数据结构 栈是一种“后进先出”(LIFO)的线性数据结构,是一种特殊的线性表。 在栈中,元素的添加和删除操作只能在表的一端进行,即栈顶。元素的添加和删除遵循“后进先出”(LIFO)的原则,最后添加的元素总是最先出栈,栈对元素的访

我的第一篇博客文章-爱代码爱编程

母牛的故事【Java语言】 题目描述 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? 输入 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。 输出 对于每个测试实例

Leetcode 538 题 把二叉搜索树转换为累加树-爱代码爱编程

题目来源:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 个人公众号:小猿君的算法笔记 题目描述 给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和

spring的aop-爱代码爱编程

基于AOP的动态代理技术 常用的动态代理技术 1.JDK代理:基于接口的动态代理技术 2.cglib代理:基于父类的动态代理技术 spring的AOP实现底层是对动态代理的方法进行的封装,封装之后我们只需要对需要增强的方法进行代码编写,并通过配置或者注解的方式指定目标的方法增强。 关于aop的相关术语 Target(目标对象):代理的目标的

hibernatetemplate实现分页查询-爱代码爱编程

hibernatetemplate实现分页查询 今天用hibernateTemplate.findByCriteria()试着进行了分页查询,网上都说采用接口 org.springframework.orm.hibernate3.HibernateCallback来做,有会的小伙伴可以告诉我我写的和他有啥优点和缺点吗? @SuppressWarnin

基于SSM的电影院订票系统(Spring+SpringMVC+Mybatis)简洁版-爱代码爱编程

运行环境,jdk1.8或者jdk1.7、tomcat8或者tomcat8.5、mysql5.7、eclipse或者myeclipse开发环境。使用框架Spring+SpringMVC+Mybatis。 1、基于SSM的电影院订票系统简洁版(Spring+SpringMVC+Mybatis),登录界面,如下所示: 2、基于SSM的电影院订票系统简洁版

Nacos 1.4 实现服务注册与发现碰到的问题:code:503,msg:server is DOWN now, please try again later-爱代码爱编程

java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/service/list after all servers([127.0.0.1:8848]) tried: failed to req API:http://127.0.0.1:8848/nacos/v1/ns/service

SpringCloudAlibaba-Nacos作为注册中心的使用步骤-爱代码爱编程

1.下载Nacos 链接:https://github.com/alibaba/nacos/releases 本次测试是以1.1.3版本为例 2. 启动Nacos 下载压缩包后,解压即可 点击startup.cmd即可启动(第一次启动是没有上面的文件夹的) 启动后: 3.配置微服务 3.1 pom配置 <dependencies&g

2020-12-13-爱代码爱编程

spring第三天学习笔记整理 文章目录 spring第三天学习笔记整理一、AOP概念及相关术语1.概念2.相关术语二、AOP增强对象示例1.实现思路2.示例三、切入点和通知1.切入点表达式的书写方式2.切入点表达式的抽取3.通知类型4.通知方法的参数5.环绕通知四、通知中获取切入点方法的参数,返回值及异常信息1.准备工作2.基于代码实现获取参数