您的位置:首页 > 编程语言 > Java开发

Spring的介绍与基本使用

2020-04-10 19:33 423 查看

1.Spring是什么

Spring可以解决业务逻辑层和其他各层的耦合问题,也是一个框架的粘合剂,它让面向接口编程思想贯穿了整个系统。
特点:高内聚,低耦合,设计层框架!
主要学习spring的以下部分:
(1)IOC思想
(2)AOP编程
(3)声明式事务的支持
(4)框架无缝整合其他框架

2.Spring的组成

Spring框架包含的功能大约由20个模块组成。这些模块按组可分为核心容器、数据访问/集成,Web,AOP(面向切面编程)、设备、消息和测试



3.1 core - 核心模块

  • spring-core:依赖注入IoC与DI的最基本实现
  • spring-beans:Bean工厂与bean的装配
  • spring-context:spring的context上下文即IoC容器
  • spring-context-support
  • spring-expression:spring表达式语言

3.Spring之IOC

3.1 IOC-控制反转在这里插入代码片
IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想
IOC概念:程序中开发者不需要人工的创建对象,而是把创建的对象权利或者工作转交给Spring容器(IOC容器),让Spring容器去创建并管理这些对象,以达到程序的高度解耦的目的!
简单来说使用IOC可以将创建对象跟管理对象的控制权交给IOC容器,使用者根据需求调用对象,不用自己手动创建对象。

3.2 DI-依赖注入
Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。
例如我们通常在 Service 层注入它所依赖的 Dao 层的实例;在 Controller层注入 Service层的实例。
DI 给对象属性赋值的过程叫做依赖注入!

4 IOC的使用

4.1.创建maven项目在pom.xml添加一下jar包

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>

</dependencies>

4.2引入log4j.properties
文件位置:src目录下
maven项目:resources目录下

# log4J日志框架的配置文件 文件名字不能改
# DEBUG 表示日志的级别  调试
# Console 日志打印在控制台

log4j.rootLogger=INFO, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

# 哪些日志需要打印
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

步骤一:创建一个操作类

public class Person {

private String name;
private Integer age;

public Person() {
System.out.println("------------> Person.Person");
}

public String getName() {
return name;
}

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

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

步骤二: 创建配置文件
建议命名: applicationContext.xml
建议位置: 普通项目src下 / maven项目 resources下

<?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">

<!-- id 和 name 可以同时存在,作为bean的标识 class添加的应该是class的全路径 -->
<bean id="personId" name="personName" class="com.bruceliu.bean.Person" />
</beans>

测试类:

public class TestSpring {
@Test
public void test1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// getBean 可以使用配置文件中的id值,也可以使用配置文件的name值.
Person person = (Person) applicationContext.getBean("personId");
System.out.println("person = " + person);
}

5.配置文件的讲解

5.1 bean标签和属性

6.对象创建的方式

在 applicationContext.xml 文件下创建对象
代码如下:

<!--spring容器创建对象,也是通过构造方法创建的,默认创建对象是通过无参构造,依赖注入靠set方法-->
<!--id是创建的对象的名字(唯一),class表示对象是从Person这个类创建出来的-->
<!--name是创建对象的名字,同一个对象可以有多个-->
<!--scope作用域属性,有两个值
单例:singleton(默认是单例模式),
多例:prototype-->
<!--lazy-init属性 对象的创建时机的设置 值:true(懒加载:用才创建)/false(spring容器一启动就创建)-->

<!--第一种的方法:spring创建对象是用无参构造方法创建对象-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="prototype" >
<!--给对象赋值,叫做依赖注入(也叫DI)-->
<property name="id" value="001"/>
<property name="name" value="小花"/>
<property name="sex" value="女"/>
</bean>

<!--init-method="对象创建完调用的方法名"
destroy-method="对象销毁调用的方法名"
-->
<bean id="p2" name="person3" class="com.swjd.bean.Person" lazy-init="false" init-method="init" destroy-method="destroy">
<!--给对象赋值,叫做依赖注入(也叫DI)-->
<property name="id" value="002"/>
<property name="name" value="小明"/>
<property name="sex" value="男"/>
</bean>

<!--第二种方式:通过有参构造创建对象-->
<bean id="p3" class="com.swjd.bean.Person">
<constructor-arg index="0" type="int" value="003"/>
<constructor-arg index="1" type="java.lang.String" value="喜洋洋"/>
<constructor-arg index="2" type="java.lang.String" value="男"/>
</bean>

<!--第三种方式:静态工厂创建对象-->
<bean id="p4" class="com.swjd.beanfactory.PersonFactory" factory-method="createPerson"/>
<!--第四种方式:非静态工厂创建对象-->
<bean id="factory" class="com.swjd.beanfactory.NoStaticPersonFactory"/>
<bean id="p5" factory-bean="factory" factory-method="createPerson"/>

6.2 静态工厂模式
创建工厂类

配置文件:applicationContext-create.xml

测试代码

6.3非静态工厂
创建工厂类

配置文件:applicationContext-create.xml

测试代码

7.Spring依赖注入的4种方式

1. 调用set方法注入

<bean id="m1" class="com.swjd.bean.Man">
<!--第一种:依赖注入的方式:set注入-->
<property name="id" value="1"/>
<property name="name" value="刘德华"/>

2. 调用带参的构造方法注入

<bean id="m2" class="com.swjd.bean.Man">
<!--第二种:依赖注入的方式:带参的构造方法-->
<constructor-arg index="0" type="int" value="2"/>
<constructor-arg index="1" type="java.lang.String" value="蔡徐坤"/>
<constructor-arg index="2" type="int" value="20"/>
<constructor-arg index="3" type="com.swjd.bean.Dog" ref="d1"/>
</bean>

3. P命名空间注入(本质依旧是set注入,语法简洁一些)

<bean id="m3" class="com.swjd.bean.Man" p:id="3" p:name="八戒" p:age="108" p:dog-ref="d1"></bean>

4. Spel表达式注入

<bean id="m4" class="com.swjd.bean.Man">
<property name="id" value="#{m1.id}"></property>
<property name="name" value="#{m2.name}"></property>
<property name="age" value="#{m3.age}"></property>
</bean>

8.基本类型

(1) 注入对象

<bean id="s1" class="com.swjd.bean.Student">
<property name="name" value="张新成"/>
</bean>

(2) 注入数组

<bean id="s1" class="com.swjd.bean.Student">
<!--注入数组-->
<property name="hobbies">
<array>
<value>演戏</value>
<value>舞蹈</value>
</array>
</property>
</bean>

(3) 注入集合

<bean id="s1" class="com.swjd.bean.Student">
<!--注入集合-->
<property name="subject">
<list>
<value>Spring</value>
<value>MyBatis</value>
</list>
</property>
<property name="friends">
<set>
<value>李明</value>
<value>小华</value>
</set>
</property>
</bean>

(4) 注入map

<bean id="s1" class="com.swjd.bean.Student">
<!--Map注入-->
<property name="map">
<map>
<entry key="CN" value="中国"/>
<entry key="RU" value="俄罗斯"/>
<entry key="US" value="美国"/>
</map>
</property>
</bean>
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Dream_V_v 发布了5 篇原创文章 · 获赞 0 · 访问量 117 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: