1.java bean
在Spring 源码深度解析中提到:假如spring是一个水桶,那么bean就像是容器中的水
对于javabean的一个理解,一直觉得像是jsp时代的产物(= =)
JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。
java bean 感觉就是pojo,简单的java对象,他需要有一个无参构造函数,需要满足面向对象的思想,属性要用private进行封装,然后使用 getter 和setter进行访问
都到了现在这个spring cloud 、boot的时代,bean负责做什么呢?
注解
2.VO
VO:与简单Java对象对应,专门用于传递值的操作上
POJO:简单Java对象
TO:传输对象,进行远程传输时,对象所在的类必须实现java.io.Serializable接口。
这些其实都是java bean
3.spring中的pojo
spring中 有四种关键策略:
基于Pojo的轻量级与最小入侵性编程
通过 依赖注入和面向接口实现松耦合
基于面向切面和管理进行声明式编程
通过切面和模板减少样板式代码
3. spring是通过DI来进行的进行装配的。
什么叫spring的上下文?
4.IOC与spring容器
spring会让我们的程序中不在进行对象的创建和管理对象之间的依赖关系,都交给IOC代劳
也就是说我将对象的创建,管理的控制权都交给了spring容器这是一种控制权的反转!(所以spring容器才被乘坐是IOC的容器)
但是并不是只有Spring容器才叫IOC容器,基于IOC容器的框架还是有很多的,并不是Spring特有的
那么@Autowired ?
决定容器里面放什么对象的是我们自己,决定对象之间的依赖关系的,也是我们自己,容器只是给我们提供一个管理对象的空间而已。
那么,我们怎么向容器中放入我们需要容器代为管理的对象呢?这就涉及到Spring的应用上下文了。什么是应用上下文呢,你可以简单的理解成就是将你需要Spring帮你管理的对象放入容器的那么一种
===============================
Spring也为我们提供了多种类型的容器实现,供我们在不同的应用场景选择——
① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
有了以上理解,问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢,java注解也好,总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好,然后利用应用上下文对象加载进我们的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-3.2.xsd">
<bean id="man" class="spring.chapter1.domain.Man">
<constructor-arg ref="qqCar" />
</bean>
<bean id="qqCar" class="spring.chapter1.domain.QQCar"/>
</beans>
然后通过应用上下文将配置加载到IOC容器,让Spring替我们管理对象,待我们需要使用对象的时候,再从容器中获取bean就ok了:
public class Test {
public static void main(String[] args) {
//加载项目中的spring配置文件到容器
// ApplicationContext context = new ClassPathXmlApplicationContext("resouces/applicationContext.xml");
//加载系统盘中的配置文件到容器
ApplicationContext context = new FileSystemXmlApplicationContext("E:/Spring/applicationContext.xml");
//从容器中获取对象实例
Man man = context.getBean(Man.class);
man.driveCar();
}
}
以上测试中,我将配置文件applicationContext.xml分别放在项目中和任意的系统盘符下,我只需要使用相应的上下文对象去加载配置文件,最后的结果是完全一样的。当然,现在项目中越来越多的使用java注解,所以注解的方式必不可少:
//同xml一样描述bean以及bean之间的依赖关系
@Configuration
public class ManConfig {
@Bean
public Man man() {
return new Man(car());
}
@Bean
public Car car() {
return new QQCar();
}
}
public class Test {
public static void main(String[] args) {
//从java注解的配置中加载配置到容器
ApplicationContext context = new AnnotationConfigApplicationContext(ManConfig.class);
//从容器中获取对象实例
Man man = context.getBean(Man.class);
man.driveCar();
}
}
转自:
作者:陈本布衣
出处:http://www.cnblogs.com/chenbenbuyi
但是感觉起来,其实上下文的话还是源于spring的独特之处,依赖注入!!
================================================================================================
@Configuration
@Bean
@Bean