标签:destory 第一个 session port 证明 ESS wired text 容器
java项目或者web项目都可以
在项目的src下新增配置文件,文件名随意:applicationContext.xml
xml文件约束文件:dtd约束dtd文件、scheme约束xsd约束文件
<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc=http://www.springframework.org/schema/mvc xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> </beans>
不需要我们自己创建对象,但是以某种方式(xml配置、注解)通知容器帮我创建什么对象。
通过xml的方式通知容器创建某个对象
在spring的配置文件中,一个bean标签表示要容器创建一个对象
前提:有属性、必须有属性的set方法
前提:有对应的参数的构造方法
前提:有p:xxx xxx属性必须有set方法,本质是采用set注入
前提:有对应参数的构造方法,本质是构造器注入
用法同p相似
可以将创建多个spring的配置文件用来做容器,用来分类管理bean
比如所有的实体类的bean:spring-pojo.xml
所有dao包类的bean:spring-dao.xml
所有service包类的bean:spring-service.xml
定义一个总的配置文件,将其他被包含的配置文件通过<import>导入其他的配置文件
或者被包含的文件取名统一的规则,可以用*进行匹配,但是主配置文件命名不是这种规则,会导致出现循环包含。
作用域:spirng创建的bean对象是否是单例的
单例:创建的对象都是同一个
spring中创建的bean默认都是单例的
证明:
通过两次获取同一个bean的id,查看输出结果
如何自定义bean的作用域
在bean标签中设置scope属性的值
scope的值:
singleton:单例
prototype:原型,多例
request:发起一次http请求,就会创建一个新的对象
session:新的session创建,就会创建也给新的对象
spring中的两个容器的API
ApplicationContext:
BeanFactory
ApplicationContext和BeanFactory的区别
区别主要在于创建bean对象的时间不同
ApplicationContext在容器启动的过程中,就会创建需要的bean对象。【效率高、占内存】
BeanFactory在容器启动过程中没有创建对象,当嗲用getBean方法的时候立马创建。
1、 调用无参数构造器,创建实例实例【实例化】
2、 调用set方法,为属性注入值
3、 如果bean类实现了BeanNameAware接口,会执行setBeanName方法,可以获取bean的id的值
4、 如果bean类实现了BeanFactoryAware接口,会执行setBeanFactory方法,可以获取BeanFactory对象
5、 如果定义了bean后处理器类【写了一个类实现了BeanPostProcessor】并且在容器中进行了注册(bean标签),会执行postProcessBeforeInitialization方法
在该方法中可以获取bean对象,也可以改变对象,通过return可以改变对象
6、 如果bean类实现了InitializingBean接口,会执行afterPropertiesSet方法
7、 如果bean标签中定义了init-method属性,调用对应的属性的值的方法
8、 会执行后处理器的postProcessAfterInitialization方法
9、 通过bean对象业务
10、 如果bean类实现了DisposableBean接口,会调用destory方法
11、 注意:手动调用了容器的close方法
12、 ((ClassPathXmlApplicationContext)context1).close();
13、 如果bean标签中定义了destroy-method属性,调用对应的属性的值的方法
spring中的aop的jar包,因为spring注解用到了aop技术
@Component
public class UserServiceImpl{
}
容器启动后会创建UserServiceImpl类的对象,并且bean的id设置为类名的第一个字母小写,即id=” userServiceImpl”
如果希望自定义bean的id的值,使用@Component(“id的名字”)
1、如何通知容器创建对象
@Component:通用的
@Repository:一般用在dao类上面
@Service:一般用在service类上面
@Controller:一般用在控制器类上面
2、如何让容器注入属性
@Autowired:容器会根据类型自动注入
@Autowired
@Qualifier("d1") 容器根据bean的id进行精确的对象的注入
@Resource:该注解不是spring里面的,是javaee里面的
@Resource(name="d1") 即可根据类型注入也可以根据bean的id注入
标签:destory 第一个 session port 证明 ESS wired text 容器
原文地址:https://www.cnblogs.com/Tunan-Ki/p/11784827.html