Spring的介绍与基本使用

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值