①spring是一个开源框架
②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。
③Spring是一个IOC(DI)和AOP容器框架。
④Spring的优良特性
[1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
[2]控制反转:IOC——Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。
[3]依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。
[4]面向切面编程:Aspect Oriented Programming——AOP
[5]容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
[6]组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
[7]一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
Spring框架分为四大模块:
Core核心模块。负责管理组件的Bean对象
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
面向切面编程
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
数据库操作
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-oxm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-jms-4.0.0.RELEASE.jar
Web模块
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
spring-websocket-4.0.0.RELEASE.jar
spring-webmvc-portlet-4.0.0.RELEASE.jar
IOC 全称指的是 Inverse Of Control 控制反转。
在使用Spring之前,对象的创建是由我们自己在代码中去new而产生。
而使用了spring之后。对象的创建完全交由Spring容器来进行。
注意:如果是你自己new的对象,就不会自动Spring的功能。
DI 指的是Dependency Injection 。是依赖注入的意思。
依赖,是指,一个对象需要完成某个功能,然后必须依靠另一个对象。叫依赖。
简单点说,就是需要。就是依赖。
比如:
public class BookService {
private BookDao bookDao; // BookService依赖BookDao
}
注入,就是给对象赋值。
依赖注入,就是指给依赖的对象赋值操作。叫依赖注入。
在使用Spring框架之前,依赖对象的赋值都是由我们通过构造器方法,或者setXxx方法来进行设置。
在使用Spring框架之后,只需要通过xml配置,或者是注解配置就可以对依赖的对象进行方法,即可的方便后面的维护和扩展
1.导入jar包
junit_4.12.jar
org.hamcrest.core_1.3.0.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar
2.创建javaBean类
public class Person {
private Integer id;
private String name;
private String sex;
private Phone phone;
private List list;
private Map map;
3.在src目录下创建springconfig文件-applictionCotext.xml
4.在applictionContext.xml中配置
test测试类
@Test
public void Test() {
/*
如何使用Spring,首先要先有一个Spring的容器对象
在Spring中容器对象由接口 ApplicationContext 表示。
ClassPathXmlApplicationContext表示从classpath类路径下加载xml配置文件,
生成ApplicationContext容器对象
*/
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
Person p1 = (Person) applicationContext.getBean("p1");
System.out.println(p1);
}
@Test
public void Test1() {
/*
容易引起的异常,多个同类型
NoUniqueBeanDefinitionException:
No qualifying bean of type 'com.atguigu.pojo.Person'
available: expected single matching bean but found 2: p1,p2
*/
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
Person bean = applicationContext.getBean(Person.class);
System.out.println(bean);
}
引用p标签
xmlns:p=“http://www.springframework.org/schema/p”
或
子对象JavaBean
public class Phone {
private String brand;
private Double money;
applictionContext.xml
朱茵
王祖贤
宋美龄
奥戴尔·赫本
jdbc:mysql:///test
root
123456
迪丽热巴
赵丽颖
古力娜扎
public class PersonFactory {
public static Person getStaticPerson(){
return new Person(14, "静态工厂方法创建Person", null,null,null,null);
}
public Person getPerson(){
return new Person(14, "实例工厂方法创建Person", null,null,null,null);
}
}
applictionContext.xml
public class FactoryBeanImpl implements FactoryBean {
@Override
public Person getObject() throws Exception {
return new Person(15, "通过继承FactoryBean接口方式创建的对象", null,null,null,null);
}
@Override
public Class> getObjectType() {
return Person.class;
}
}
applictionContext.xml
创建一个类Life
public void init(){
System.out.println(" 对象初始化了 ");
}
public void destory(){
System.out.println(" 对象销毁了 ");
}
appliction.xml
默认情况下。Spring配置文件中的对象会随着Spring容器的创建而一起创建.
关闭Spring 容器的时候,才会销毁Bean对象(对多例无效)
创建类继承BeanPostProcessor接口
package com.atguigu.beanpostprocessor;
import com.atguigu.pojo.Customer;
import com.atguigu.pojo.Phone;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @author ikkkc_
* @Data 2020-12-29 周二
* @Description
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
// bean的后置处理器
//初始化前
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("==postProcessBeforeInitialization==");
System.out.println("正在初始化的对象" + bean);
System.out.println("正在初始化的对象的名称" + beanName);
System.out.println("==postProcessBeforeInitialization==");
return bean;
}
//初始化后
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("=======postProcessAfterInitialization========");
if (bean instanceof Customer) {
Customer beanT = (Customer) bean;
beanT.setPhone(new Phone("爱疯888", 3999.9));
}
return bean;
}
}
applictionContext.xml
导入需要的jar包:
druid-1.1.9.jar
mysql-connector-java-5.1.37-bin.jar
测试
@Test
public void Test23() throws SQLException {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applictionContext.xml");
DruidDataSource datasource1 = (DruidDataSource) applicationContext.getBean("datasource1");
System.out.println(datasource1);
System.out.println(datasource1.getConnection());
}
jdbc.properties
url=jdbc:mysql:///mybatis
driverClassName=com.mysql.jdbc.Driver
#spring的username用的时登录名的name 请用别的值代替
user=root
password=123456
maxActive=10
initialSize=5
applictionContext.xml
①spring是一个开源框架
②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。
③Spring是一个IOC(DI)和AOP容器框架。
④Spring的优良特性
[1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
[2]控制反转:IOC——Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。
[3]依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。
[4]面向切面编程:Aspect Oriented Programming——AOP
[5]容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
[6]组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
[7]一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
Spring框架分为四大模块:
Core核心模块。负责管理组件的Bean对象
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
面向切面编程
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
数据库操作
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-oxm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-jms-4.0.0.RELEASE.jar
Web模块
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
spring-websocket-4.0.0.RELEASE.jar
spring-webmvc-portlet-4.0.0.RELEASE.jar
IOC 全称指的是 Inverse Of Control 控制反转。
在使用Spring之前,对象的创建是由我们自己在代码中去new而产生。
而使用了spring之后。对象的创建完全交由Spring容器来进行。
注意:如果是你自己new的对象,就不会自动Spring的功能。
DI 指的是Dependency Injection 。是依赖注入的意思。
依赖,是指,一个对象需要完成某个功能,然后必须依靠另一个对象。叫依赖。
简单点说,就是需要。就是依赖。
比如:
public class BookService {
private BookDao bookDao; // BookService依赖BookDao
}
注入,就是给对象赋值。
依赖注入,就是指给依赖的对象赋值操作。叫依赖注入。
在使用Spring框架之前,依赖对象的赋值都是由我们通过构造器方法,或者setXxx方法来进行设置。
在使用Spring框架之后,只需要通过xml配置,或者是注解配置就可以对依赖的对象进行方法,即可的方便后面的维护和扩展
1.导入jar包
junit_4.12.jar
org.hamcrest.core_1.3.0.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar
2.创建javaBean类
public class Person {
private Integer id;
private String name;
private String sex;
private Phone phone;
private List list;
private Map map;
3.在src目录下创建springconfig文件-applictionCotext.xml
4.在applictionContext.xml中配置
test测试类
@Test
public void Test() {
/*
如何使用Spring,首先要先有一个Spring的容器对象
在Spring中容器对象由接口 ApplicationContext 表示。
ClassPathXmlApplicationContext表示从classpath类路径下加载xml配置文件,
生成ApplicationContext容器对象
*/
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
Person p1 = (Person) applicationContext.getBean("p1");
System.out.println(p1);
}
@Test
public void Test1() {
/*
容易引起的异常,多个同类型
NoUniqueBeanDefinitionException:
No qualifying bean of type 'com.atguigu.pojo.Person'
available: expected single matching bean but found 2: p1,p2
*/
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
Person bean = applicationContext.getBean(Person.class);
System.out.println(bean);
}
引用p标签
xmlns:p=“http://www.springframework.org/schema/p”
或
子对象JavaBean
public class Phone {
private String brand;
private Double money;
applictionContext.xml
朱茵
王祖贤
宋美龄
奥戴尔·赫本
jdbc:mysql:///test
root
123456
迪丽热巴
赵丽颖
古力娜扎
public class PersonFactory {
public static Person getStaticPerson(){
return new Person(14, "静态工厂方法创建Person", null,null,null,null);
}
public Person getPerson(){
return new Person(14, "实例工厂方法创建Person", null,null,null,null);
}
}
applictionContext.xml
public class FactoryBeanImpl implements FactoryBean {
@Override
public Person getObject() throws Exception {
return new Person(15, "通过继承FactoryBean接口方式创建的对象", null,null,null,null);
}
@Override
public Class> getObjectType() {
return Person.class;
}
}
applictionContext.xml
创建一个类Life
public void init(){
System.out.println(" 对象初始化了 ");
}
public void destory(){
System.out.println(" 对象销毁了 ");
}
appliction.xml
默认情况下。Spring配置文件中的对象会随着Spring容器的创建而一起创建.
关闭Spring 容器的时候,才会销毁Bean对象(对多例无效)
创建类继承BeanPostProcessor接口
package com.atguigu.beanpostprocessor;
import com.atguigu.pojo.Customer;
import com.atguigu.pojo.Phone;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @author ikkkc_
* @Data 2020-12-29 周二
* @Description
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
// bean的后置处理器
//初始化前
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("==postProcessBeforeInitialization==");
System.out.println("正在初始化的对象" + bean);
System.out.println("正在初始化的对象的名称" + beanName);
System.out.println("==postProcessBeforeInitialization==");
return bean;
}
//初始化后
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("=======postProcessAfterInitialization========");
if (bean instanceof Customer) {
Customer beanT = (Customer) bean;
beanT.setPhone(new Phone("爱疯888", 3999.9));
}
return bean;
}
}
applictionContext.xml
导入需要的jar包:
druid-1.1.9.jar
mysql-connector-java-5.1.37-bin.jar
测试
@Test
public void Test23() throws SQLException {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applictionContext.xml");
DruidDataSource datasource1 = (DruidDataSource) applicationContext.getBean("datasource1");
System.out.println(datasource1);
System.out.println(datasource1.getConnection());
}
jdbc.properties
url=jdbc:mysql:///mybatis
driverClassName=com.mysql.jdbc.Driver
#spring的username用的时登录名的name 请用别的值代替
user=root
password=123456
maxActive=10
initialSize=5
applictionContext.xml