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>
- 点赞
- 收藏
- 分享
- 文章举报
- shiro大致介绍,shiro-Spring整合细节,shiro基本使用,自定义方法使用shiro
- Spring基本介绍和使用示例
- lighttpd的安装和基本模块的使用介绍
- Ant介绍以及基本使用指南
- [Unity3D]在Unity3D中Javascript的基本使用与介绍
- ORACLE基本命令使用介绍
- 【Android-Emulator】Android模拟器介绍和基本使用
- Ant介绍以及基本使用指南
- 【转】Spring Insight 使用介绍
- Lucene基本使用介绍
- 【Android-Emulator】Android模拟器介绍和基本使用
- Ant介绍以及基本使用指南
- java泛型(一)、泛型的基本介绍和使用
- Ant介绍以及基本使用指南
- Ant介绍以及基本使用指南
- Spring系列之三——Spring体验中IOC使用的介绍
- Java NIO基本使用介绍
- tkprof的基本使用详细介绍
- Eclipse 入门及其基本的使用介绍
- lighttpd的安装和基本模块的使用介绍