Spring学习笔记(二)Spring的环境搭建
Spring个人概述,核心配置文件(.xml)里的bean标签什么时候被实例化,获取对象的两种方式,Bean的范围说明,beans.xml就是spring框架提供的容器(管理Bean Bean就是对象 必须通过类 类必须可能进行实例化)
源码获取github
1.Spring个人概述
Spring是轻量级别开源的框架(重量级别EJB),解决并发也比较优秀
重点:Spring是一个 IoC(DI) 和 AOP 的 容器框架(JAVAEE框架的集合):它主要是管理Bean的生命周期使用
XML完成对Bean的实例化
注解也是完成对Bean的实例化操作
Spring是一站式服务
什么是IoC?
控制反转:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
举例子说明控制反转
和尚是一个编剧写剧本,当我写该剧本的时候,我并不需要考虑谁合适演,但是我应该有权利决定谁来演 导演出现,编剧将选人物的权利移交出去,控制权移交出去 出品人出现,导演将选人物的权利移交出去,控制权移交出去 点餐 最开始:自己去食堂,自己去打菜,自己吃 外卖出现:只是需要发送一个请求告知外卖小哥,我想吃什么,那么外卖小哥为我们服务,将需要的菜取回来给我们品尝 java体现 容器框架(Bean的生命周期创建 使用 销毁) 管理Bean,也就是创建对象(也就是注入)(就不用我们自己new创建对象了)
2.项目结构
3.Spring环境搭建
框架流程都是:先找jar包=>入口文件(核心配置文件beans.xml官方推荐的名字是applicationContext.xml)=>使用API调用过程=>测试
4.jar包
pom.xml加入依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
</dependencies>
5.核心配置文件(入口)
User.java
package com.hs.model;
public class User {
private String user_name;
private Integer user_id;
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
}
beans.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.xml就是spring框架提供的容器-->
<!--管理Bean Bean就是对象 必须通过类 类必须可能进行实例化-->
<!--下面那个代码相当于 java代码 HashMap map1 = new HashMap(); HashMapjava内置的类 -->
<!--<bean id="map1" class="java.util.HashMap"></bean>-->
<!--static User u1 = new User();只有一个new对象,Bean的范围说明——scope="singleton"默认为单例模式,scope可以不用写-->
<bean id="u1" class="com.hs.model.User" scope="singleton"/>
<!--User u2 = new User(); prototype多例模式,需要对象就new一个,每个不同-->
<bean id="u2" class="com.hs.model.User" scope="prototype"/>
</beans>
6.使用API调用过程
获取对象两种方式:
User user = (User) ac.getBean("u1");
User user = ac.getBean("u1", User.class);
ObjectTest.java
读取核心配置文件 == 发现了Bean标签就会对class对应的类进行实例化操作
ApplicationContext ac = new ClassPathXmlApplicationContext(“beans.xml”);
/** * 同一个类的实例化对象比较 */
@Test
public void test01() {
// 1.读取核心配置文件 == 发现了Bean标签就会对class对应的类进行实例化操作
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
// u1就是bean标签里的id的名字
User user1 = ac.getBean("u1", User.class);
User user2 = ac.getBean("u2", User.class);
System.out.println(user1);
System.out.println(user2);
System.out.println(user1==user2); //false
System.out.println(user1.equals(user2)); //false
}
7.bean的范围说明
ObjectTest.java
/** * Bean的范围说明——默认为单例模式 */
@Test
public void test02() {
// 1.读取核心配置文件 == 发现了Bean标签就会对class对应的类进行实例化操作
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User user1 = ac.getBean("u1", User.class);
User user2 = ac.getBean("u1", User.class);
System.out.println(user1);
System.out.println(user2);
System.out.println(user1==user2); //true
System.out.println(user1.equals(user2)); //true
}
/** * Bean的范围说明——设置多例模式 */
@Test
public void test03() {
// 1.读取核心配置文件 == 发现了Bean标签就会对class对应的类进行实例化操作
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User user1 = ac.getBean("u2", User.class);
User user2 = ac.getBean("u2", User.class);
System.out.println(user1);
System.out.println(user2);
System.out.println(user1==user2); //false
System.out.println(user1.equals(user2)); //false
}