目录
Spring 框架干了什么?
1.读取xml文件
2.根据id标识获取Bean全限定名
3.通过反射创建Bean对象
4.返回对象
简单的Bean使用
1.配置Spring的maven坐标
2.写一个接口,一个接口的实现类
3.创建一个applicationContext.xml文件
配置<bean id="自定义一个id名" class="实现类的全路径"></bean>
4.调用:在主函数中创建一个classPathXMLApplicationContext对象,参数为xml的文件名要带上.xml,然后调用getBean方法去调用,方法中的参数为命名的id名
Bean标签范围配置
scope属性:对象的作用范围取值如下
singleton 默认值,单例的
prototype 多例的
request web项目中 Spring创建一个Bean的对象,将其存入request域中
session web项目中 Spring创建一个Bean的对象,将其存入session域中
global session web项目中应用在portlet环境,如果没有就相当于session
singleton Bean的创建的时机在加载xml文件时
生命周期:
对象创建:当应用加载,创建容器时,对象被创建
对象运行:只要容器在,对象就一直活着
对象销毁:当应用卸载,销毁容器对象就被销毁了
prototype Bean的创建时机,当调用getBean()方法时实例化Bean
生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用就一直活着
对象销毁:当对象长时间不用时,被Java的垃圾回收器收回
Bean生命周期配置
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名称
Bean实例化三种方法
1.无参构造方法实例化
2.工厂静态方法实例化
3.工厂实例方法实例化
factory-method="方法名" 工厂静态方法实例化
工厂实例方法实例化
<bean id="factory" class="工厂实现类的全路径"></bean>
<bean id="getUers" factory-bean="factory" factory-method="方法名"></bean>
Bean的依赖注入分析
(将一个值写入到一个无参方法中,有两种方法,1.用set方法 2.用含参构造)
set注入
<bean id = " " class=" ">
<property name = "set方法后面名称,第一个单词要小写" ref="注入的bean的id">
</propetry>
</bean>
构造注入
先在Dao层里面写好构造函数
<bean id=" " class=" ">
<constructor-arg name="参数名" ref ="注入的bean的id">
</constructor-arg>
</bean>
Bean的依赖注入的数据类型
除了对象引用可以注入,普通数据类型,集合等都可以在容器中进行注入
注入普通数据类型用value=" "
<property name = " ">
<list>
<value> </value>
</list>
</property>
<property name = " ">
<map>
<entry key =" " value-ref= " ">
</entry>
<map>
在xml文件中用<context:property-placeholder location="classpath:jdbc.properties">加载外部的properties文件
引入其他的配置文件(分模块开发)
<import resoure = "xxx.xml"></import>
Spring相关API
ApplicationContext的实现类
1.ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件推荐使用这种
2.FileSystemXmlApplicationContext
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任何位置,参数为全路径地址
3.AnnotationConfigApplicationContext
当使用注解配置容器对象,需要用些类创建Spring容器他用来读取注解
properties文件
结构为key-value结构
读取此配置文件
ResourceBundle rb =ResourceBundle.getBundle("properties文件名");
String str = rb.getString("key值");
注解:
@Component("id")相对于一个<bean>,用于类名上面
@Autowired //按照数据类型从Spring容器中进行匹配
@Qualifier("注入的Bean的id") //是按照id值从容器中进行匹配的,要和@Autowired一起使用
使用注解需要在xml文件中配置组件扫描
<context:component-scan base-package="包的全路径"/>
set注入需要set方法,用注解就不需要了
@Resource(name="注入的Bean id") //相当于@Autowired+@Qualifier
基本数据类型
@Value("${key值}")
@Scope("singleton") //让Spring产生单例的bean
@Scope("prototype") //多例
@postConstruct //用在初始化方法上,用来定义bean的初始化方法
@preDestroy //用在销毁方法上,用来定义bean的销毁方法
Spring的新注解
为了解决:1.非自定义的bean的配置 <bean>
2.加载properties文件的配置<context:property-placeholder>
3.组件扫描的配置<context:component-scan>
4.引入其他文件<import>
@Configuration //标志该类是Spring的核心配置类
@ComponentScan("包的路径名") //扫描包
@Bean("起个名字,也可不起") //Spring会将当前方法的返回值存在Spring容器中
@PropertySource("classphth:xxx.properties")
@Import({xxx.class,xxx.class})
使用了注解,这个时候想加载配置文件,不能用classPathXmlApplicationContext
现应用AnnotationConfigApplicationContext(Configuration的类名带上.class)