Spring是什么
Spring是一个开源的控制反转(IoC) 和面向切面(AOP) 的容器框架,可以管理Bean对象的创建和销毁。“程序员的春天来了~”
Spring贯穿表现层,业务层,持久层。
依赖注入
把“控制反转”称为“依赖注入”要更好理解一些。
依赖注入,是指程序运行过程中,如果需要另一个对象协作时,无须在代码中创建被调用者,而是依赖于外部容器的注入(依赖对象由容器注入)。
总结为,容器创建和管理依赖对象,并向应用动态注入。
原理
XML解析+反射
注入方式
1、构造
2、setter
3、注解
Spring的接口
Spring的两个核心接口:BeanFactory和ApplicationContex,其中ApplicationContext是BeanFactory的子接口,他们都代表Spring容器。Spring容器负责创建Bean实例。
BeanFactory有一个常用的实现类:
- XmlBeanFactory
ApplicationContext常用的实现类:
- FileSystemXMLApplicationContext
- ClassPathXmlApplicationContext
- AnnotationConfigApplicationContext
创建Spring容器实例时,必须提供Spring容器管理的Bean的详细配置信息,即bean.xml。
Resource接口是Spring提供的资源访问接口。
大部分的JavaEE应用,可以在启动web应用时自动加载ApplicationContext实例。
对于独立的应用程序,通常ApplicationContext实例操作Bean。
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"});
Spring容器中的Bean
bean的配置
<bean id="xbean" class="com.XBean" scope="">
<constructor-arg value="run"/>
<constructor-arg value="100km"/>
<property name="id" value=""/>//属性setter方法注入
</bean>
数据源bean
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost/javaee"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
bean的scope
- singleton单例。在默认情况下,当Spring创建ApplicationContext容器时,Spring会自动预初始化容器中所有singleton实例。
可以在该<bean>中设置lazy-ini为true,使第一次获取bean会才初始化bean - prototype 每次从容器获取bean都是新的对象。
Spring容器对Bean没有特殊的要求,甚至不要求该Bean像标准的JavaBean,必须提供对应的setter和getter方法。
Spring中的 Bean是 java实例,java组件,而传统的java应用中的JavaBean通常作为DTO(数据传输对象),用来封装值对象,在各层之间传递数据。
注解
Spring3.0提供注解方式的配置管理。
Java配置类的三个常用Annotation
1.@Configuration:用于修饰一个java配置类
2.@Bean:用于修饰方法,该方法的返回值定义成容器中的一个Bean
3.@Value:修饰一个Field,用于为属性赋值