深入ssm框架1--bean与spring容器( spring管理bean 注册+装配 )
本文内容纲要:深入ssm框架1--bean与spring容器( spring管理bean 注册+装配 )
@参考网络 仅为学习笔记
深入ssm框架1--bean与spring容器( spring管理bean 注册+装配 )
Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用
(1)spring容器会根据含有Bean配置的XML文件(spring.xml),把配置文件的Bean配置信息与spring容器中Bean定义注册表相对应起来;
(2)spring容器根据Bean注册表实例化Bean;
(3)通过Bean的实现类,把实例化过的Bean放到spring容器中的Bean缓存池中;
(4)某个模块要是使用的话,通过注解或者xml配置,让spring把Bean缓存池中的实例Bean注入到该模块当中;
1ApplicationContext.getBean(“id”); Context = new 2ClassPathXmlApplicationContext(“配置文件xml”);
1接口读取配置文件 管理对象的加载生成维护bean对象之间的依赖关系负责bean的生命周期
2接口实现类 从classpath路径中读取配置文件 除此之外还有其它实现类fileSystemXmlApplicationContext applicationContext其实是建立在beanFactory基础上的 beanFactory接口是spring ioc的核心 负责管理组件和它们之间的依赖关系 用用程序通过beanfactory 接口与ioc容器交互 applicationContext是beanFactory的子接口
1 Spring管理Bean两个部分 注册 1自动 2JavaConfig 3XML+ 装配Bean 1依赖 2****注解
Spring容器启动的三大要件分别是 bean定义信息 实现类 spring本身
xml配置 | xml配置 <beans>默认命名空间 xsi命名空间 自动注解 引入context命名空间 spring命名aop的命名空间 是用户自定义的
用于为每个文档中命名空间指定响应的schema 样式文件是标准组织定义的标准命名空间 1指定名称 2指定空间的schema文档样式文件的位置 用空格或回车换行进行分隔
<bean id="" class=""> 默认命名空间配置 定义对象信息与类信息是分离的 设值注入 而非直接为属性赋值 通过调用bean的setter方法实现 | <?xml version=”1.0” encoding=”utf-8”?> xml声明 读取文档字符集 <beans xmlns=”默认命名空间http://www.springframework.org/schema/beans” xmlns:xsi=”xsi标准命名空间指定自定义的scheme文件http://www.w3.org/2002/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context”//自动注解 引入context命名空间 xmlns:aop=”命名空间全称必须在xsi命名空间为其指定空间对应scheme文件http://www.springframework.org/schema/aop” xsi:schemaLocation=” http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd” http://www.springframework.org/schema/context/spring-context-3.0.xsd” >
<bean id="userDao" class="com.baobaotao.anno.UserDao"/> <bean id="logDao" class="com.baobaotao.anno.LogDao"/> <bean id="logService" class="com.baobaotao.conf.LogonService" p:logDao-ref="logDao" p:userDao-ref="userDao"/> <aop:config><aop: ></aop:config> aop命名空间配置 |
采用xml方式定义信息与实现类是分离的 基于注解的配置方式时bean定义信息即通过在bean实现类上标注注解实现 使用注解配置信息启动spring容器 spring提供了一个context的命名空间 提供了通过扫描类以应用注解定义bean的方式 注解生效 xml配置显示指定 xml配置文件中使用context/////重写spring容器的context | ||
自动配置 | Component == Repository+Service+Controller 特殊注解 用途更清晰化 @AutoWired注解去装配Bean (所谓装配,就是管理对象直接的协作关系) 类上注解定义 bean定义信息通过bean实现类上标注注解实现 context 这样此类对象只有一个??? | <context:component-scan base-package=”com.baobaotao.anno” resource_pattern=””/> 扫描类包以用用注解定义的bean <bean class=”com.baobaotao.anno.LogonService”></beans>??? <context:include-filter type=”regex” expression=”com\.baobaotao\anno.*Service”/> <context:exclude-filter type=”aspectj” expression=”com\.baobaotao..*Controller+”/> import org.springframework.stereotype.Component/Repository; @Component("userDao")public class UserDao {} //①通过Repository定义一个DAO的Bean |
java config | 普通pojo类标注@Configuration spring容器如何配置 (怎么去注册bean,怎么去处理bean之间的关系=装配) 类的方法可以标注bean注解 类型由方法返回值类型确定 名称默认同方法名 也可以通过入参显示指定的bean名称 @Bean(name=””) @Bean意思,获取此bean时,spring按照此方式去帮获取 在方法上,告诉Spring容器可以从下面这个方法中拿到一个Bean 每个标注了@bean的类方法都相当于提供了一个bean的定义信息 | import org.springframework.context.annotation.Bean/ Configuration; @Configuration //①将一个POJO标注为定义Bean的配置类 public class AppConf { //②以下两个方法定义了两个Bean,以提供了Bean的实例化逻辑 @Bean public UserDao userDao(){ return new UserDao(); } @Bean public LogDao logDao(){ return new LogDao(); } //③定义了logonService的Bean @Bean public LogonService logonService(){ LogonService logonService = new LogonService(); //④将②和③处定义的Bean注入到LogonService Bean中 logonService.setLogDao(logDao()); logonService.setUserDao(userDao()); return logonService; }} |
传统的spring时xml配置的,Javaconfig 是指基于java配置的spring spring3.0新增了许多Java config的注解 特别是springboot 1@configuration配置类 注解该类 等价于xml配置beans 用@bean等价于xml中配置bean 被注解的类内部包含一个或多个被@bean注解的 2注解@Autowried @Qualifier(“beanid”)/直接引用; /@Resource() private 类 beanid 3通过bean元素声明需要spring创建的实例 类型通过class属性指定 并通过id属性为该实例指定一个名称Property为属性赋值 bean引用可以用内部bean方式注入 基于java类的配置方式和基于xml或基于注解的配置方式相比 前置通过代码的方式更加灵活的实现了bean的实例化及bean之间的装配 但后面两者都是通过配置声明的当时 在灵活性上要稍逊一些但是配 |
装配
依赖注入 | 属性注入setXxx()可选择性和灵活性高的优点 最常用 要求bean有默认构造函数 反射方式注入<property name=”” ref=””></property> <property name=””><value>…</value></property> 构造函数注入 bean提供带参构造函数<constructor ref=””></> 工厂方式注入 非静态工厂方法 <!-- 工厂方法--> <bean id="carFactory" class="...CarFactory" /> <bean id="car5" factory-bean="carFactory" factory-method="createHongQiCar"> </bean> 很多工程类都是静态的 意味着用户无须创建工厂类实例的情况下就可以调用工厂类方法 调用更加方便<bean id="car6" class="...CarFactory" factory-method="createCar"></bean> |
注解注入 | 注解注入 Autowired 默认按类型匹配,在容器查找匹配Bean,当有且仅有一个匹配的Bean时,将其注入 required即使找不到匹配的Bean也不用抛出异常,使用@Autowired(required=false)进行标注: Qualifier限定注入bean名称 @Autowired @Qualifier("userDao") private UserDao userDao; 对类成员变量及方法的入参进行标注 public void init(@Qualifier("userDao")UserDao userDao,LogDao logDao){ Spring还支持@Resource名称匹配也可属性方法 和@Inject注解(无required) |
参考: https://www.cnblogs.com/bossen/p/5824067.html
Bean与spring容器关系 https://www.cnblogs.com/rainwang/p/7568238.html
词组解释:
javabean JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取 属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
pojo 简单的Java对象,实际就是普通JavaBeans
pojo=普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,它不包含业务逻辑或持久逻辑
但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范.
xsi web.xml遵守xml规范 与dtd类似
schema 对文档的限制 schemaLocation用于声明了目标名称空间的模式文档
命名空间:schemaLocation用于声明了目标名称空间的模式文档
命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。使用扩展标记语言的时候,XML的命名空间是所有元素类别和属性的集合。元素类别和属性的名字是可以通过唯一XML命名空间来唯一。
在XML里,任何元素类别或者属性因此分为两部分名字,一个是命名空间里的名字另一个是它的本地名。在XML里,命名空间通常是一个统一资源识别符(URI)的名字。而URI只当名字用。主要目的是为了避免名字的冲突。
本文内容总结:深入ssm框架1--bean与spring容器( spring管理bean 注册+装配 )
原文链接:https://www.cnblogs.com/eileen78/p/11541259.html
以上是 深入ssm框架1--bean与spring容器( spring管理bean 注册+装配 ) 的全部内容, 来源链接: utcz.com/z/295937.html