Spring框架

1.Spring框架都概念

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。
Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。

2.Spring框架的基本构造

在这里插入图片描述

3.Spring的helloworld

3.3.1 创建maven项目

在这里插入图片描述

3.3.2 引入Spring框架

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dyit.spring</groupId>
  <artifactId>spring-hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
  	<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.15</version>
</dependency>


  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.12</version>
  	</dependency>
  </dependencies>
</project>

在这里插入图片描述

3.3.3 创建实体类

public class Car {
	private Integer id;
	private String brand;
	private String color;
	private Double price;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public Double getPrice() {
		return price;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car [id=" + id + ", brand=" + brand + ", color=" + color + ", price=" + price + "]";
	}
	public Car(Integer id, String brand, String color, Double price) {
		super();
		this.id = id;
		this.brand = brand;
		this.color = color;
		this.price = price;
	}
	public Car() {
		
	}
	
	

}

3.3.4配置Spring容器

<?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="car1" class="com.dyit.spring.Car">
		<property name="id" value="2"/>
		<property name="brand" value="奔驰"/>
		<property name="color" value="绿色"/>
		<property name="price" value="120000.00"/>
	
	</bean>
</beans>

3.3.5 测试

@Test
	public void testSpring() {
		//获取容器
		ApplicationContext act = 
				new FileSystemXmlApplicationContext("classpath:spring/applicationContext.xml");
		Car car = act.getBean(Car.class,"car1");
		System.out.println(car);
	}

4.Spring容器(bean)配置文件

4.1 Spring bean的加载流程

Bean的配置信息定义了bean的实现和依赖关系,SPring容器根据各种形式的bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载,实例化bean,并建立bean和bean的依赖关系,最后将这些准备就绪的bean放入bean缓存池中,以供外层程序进行调用。

在这里插入图片描述

和mybatis的缓存相类似。、

4.1.1 配置bean


	<bean id="car1" class="com.dyit.spring.Car">
		<property name="id" value="2"/>
		<property name="brand" value="奔驰"/>
		<property name="color" value="绿色"/>
		<property name="price" value="120000.00"/>
	
	</bean>
</beans>

4.1.2 容器启动 (加载工厂)

//获取容器
		ApplicationContext act = 
				new FileSystemXmlApplicationContext("classpath:spring/applicationContext.xml");

4.1.3 读取配置信息

在容器中定义了一个bean的注册表:将bean信息注册到容器中

4.1.4根据注册表实例化bean对象

4.1.5 放入容器(工厂)的缓存中

Car car = act.getBean(Car.class,"car1");

4.2 bean的配置

4.2.1 bean对象默认是单例的

4.2.2 bean标签

  • id/name:在容器中的唯一名称(不能重复)
  • class:类的全名—包名+类名
  • init-method:在对象创建之后第一个调用的方法
<bean id="bwmx" class="com.dyit.spring.Car" init-method="initx">
  • destory-method:在容器销毁对象时调用的方法
<bean id="bwmx" class="com.dyit.spring.Car" init-method="initx" destroy-method="finish"> 
  • ref:引用容器中bean的id/name(可以理解为直接引用对象)
<bean id="bwmx" class="com.dyit.spring.Car" init-method="initx" destroy-method="finish" > 
		<property name="id" value="1"/>
		<property name="brand" value="奔驰"/>
		<property name="color" value="黄色"/>
		<property name="price" value="800000.00"/>
	</bean>
	
	<bean id="tom" class="com.dyit.spring.Person">
		<property name="name"  value="关羽"/>
		<property name="car" ref="bwmx"/>
	</bean>
<bean id="com" class="com.dyit.spring.Conpany">
		<property name="name" value="中国石油"> </property>
		<property name="map" >
			<map>
				<entry key="万科" value-ref="emp1"/>
				<entry key="甲骨文" value-ref="emp1"/>
				<entry key="中国石油" value-ref="emp1"/>
			</map>
		
		</property>
	
	</bean>
	
	<bean id="emp1" class="com.dyit.spring.Emp">
		<property name="name" value="老王"></property>
		<property name="books" >
			<list>
				<ref bean="book1"/>
				<ref bean="book1"/>
				<ref bean="book1"/>
				<ref bean="book1"/>
			</list>
		</property>
	</bean>
	
	<bean id="book1" class="com.dyit.spring.Book">
		<property name="title" value="一个小目标"></property>
		<property name="author" value="佚名"></property>
		<property name="price" value="66.66"></property>
	</bean>

4.2.3使用注解配置

@Controller
@Service
@Repository
@Component

<context:component-scan base-package=“com.dyit.spring”/>
扫描包下的类是否有@Controller, @Service @Repository @Component,将注解的类注册,实例化放入缓存

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">


	<context:component-scan base-package="com.dyit.spring"/>

</beans>
public interface IBookService {
	
	void deleteBook(int id);

}

@Service
public class BookServiceImpl implements IBookService {

	@Override
	public void deleteBook(int id) {
		System.out.println("删除"+id+"成功");
		
	}
}

@Controller
public class BookController {
    
    //@Autowired :自动查找容器中是否有IBookSerivce这种类型的对象,如果有则注入对象
	@Autowired
	private IBookService ibs; //ibs = new 。。。。
	
	public void del() {
	
		ibs.deleteBook(1);
	}

}

4.3 Spring的IoC容器

在这里插入图片描述

Spring容器是Spring框架的核心。容器将创建对象,把他们连接在一起,配置他们,并管理他们的整个生命周期,从创建到销毁。
IoC容器是具有依赖注入功能的容器,它可以创建对象,IoC容器负责实例化、定位、配置应用程序中的对象及建立对象间的依赖。通常new一个实例,控制权由程序员控制,而控制反转是指new实例工作不由程序员来做,而是交给Spring容器来做.

Spring IoC容器---->工厂模式
POJO:对象
配置(xml,注解)–>解析–>POJO–>IoC–>从IoC获取对象

4.3.1 IoC的概念

IoC:Inverse Of Control 控制反转

通俗来讲:对象由IoC容器构造,当我们需要时从IoC获取对象

4.3.2 DI是什么

实现过程中很复杂,很难实现。有些概念没有交代的特别清楚
如:控制权是什么?如何反转?反转什么?
DI:依赖注入

4.3.2.1set注入(推荐)
<bean id="pb" class="com.dyit.entity.Publisher">

	<property name="id" value="1"/>
	<property name="name" value="工人出版社"/>
	<property name="loc" value="长安区"/>
</bean>
4.3.2.2构造方法注入
public class Author {
	
	private Integer id;
	private String name;
	private String address;
	
	public Author() {
	}
	
	public Author(String name, String address) {
		this.name = name;
		this.address = address;
	}

	@Override
	public String toString() {
		return "Author [id=" + id + ", name=" + name + ", address=" + address + "]";
	}

}

<bean id="au" class="com.dyit.entity.Author">
  <constructor-arg name="name" value="张三"/>
  <constructor-arg name="address" value="西安"/>
</bean>
4.3.2.3接口注入(少)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值