从这一周开始,我们开始学习框架知识了,刚开始学的是一个简单但是重要是框架,就是spring框架,spring框架的主要特点是控制反转(ioc),即通过spring框架来创建对象以及管理对象之间的依赖关系。
另一个就是aop面向切面编程,即通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术,通过aop可以可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,从而实现代码的可重用性和开发效率。
DI是依赖注入,在运行期由由外部容器动态的将依赖对象注入到另一个对象中,即ioc描述的是一种思想,DI是对ioc思想的具体实现。
Spring框架的优点主要有:高内聚、低耦合、Aop编程的支持、声明事务的支持、方便程序的测试、方便集成各种优秀的框架,spring框架不排斥其它开源框架,内部提供了对各种框架的直接支持。
Spring框架中创建bean的方式:
- 默认使用构造函数创建
<bean id="helloworld" class="com.hqyj.Helloworld">
- 类中的方法创建
<bean id="school" class="com.hqyj.School"></bean>
<bean id="helloworld" factory-bean="school" factory-method="getHelloworld"></bean>
- 类中的静态方法创建
<bean id="school" class="com.hqyj.School"></bean>
<bean id="helloworld" class="com.LSTAR.School" factory-method="getHelloworld"></bean>
Spring框架中获取bean的方式:
- 通过唯一标识id来获取
- 通过bean的类型来获取
- 指定bean的id值和类型
Bean对象的生命周期
在单例对象时,当容器创建时候bean对象出生,只要容器还在,bean对象就一直活着,容器销毁了,bean对象也就消亡了。
在多例对象时,只有使用对象时spring创建对象,只要这个对象被调用期间就一直活着,当对象长时间没有被其它对象引用时,就有java垃圾回收器对其进行回收。
Spring的依赖注入:
- 通过构造函数注入依赖,通过标签constructor-arg进行操作,通过name给构造函数中指定的名称的参数赋值,value用于提供基本类型和String类型,还可以通过ref指定其它的bean类型数据,指的是在spring的ioc核心容器出现的bean对象。
- 使用set注入,需要在类中创建set方法,在bean标签中使用property标签,同样通过value属性和ref属性进行注入。
- 集合注入,先在类中创建集合成员变量和set方法,生成对应的set和toString方法,接着通过不同的集合使用不同的标签进行值的注入。
框架之所以方便是因为它有许多的注解,简化了代码,spring中创建对象的注解有@Component,作用是把当前对象存入Spring容器中,方便调用,还有@controller、@service、@Repository这三个注解和@Component注解作用相同,这是spring框架提供的使三层对象更加清晰。@Controller注解一般用于表现层、@service一般用于业务逻辑层、@Repository一般用于持久层。
框架中的注入注解,@Value注解用于基本类型和String类型数据的注入。@Autowired注解是注入其它bean类型,自动按照类型注入,只要容器中有bean对象类型和要注入的变量类型匹配,就可以注入成功,如果存在多个类型相同的对象时,就通过bean的id进行查找匹配。
可以使用@Qualifier注解,在按照类型注入的基础上,在按照id名称注入,它在给类成员注入时不能单独使用,但是在给方法参数注入时可以单独使用。
@Resource注解可以单独使用,并且注解按照bean的id注入。
在这些注入注解中,@Autowired、@Qualifier、@Resource都只能注入其它bean类型的数据,不能注入基本类型和string类型,基本类型和string类型只能使用注解@Value。
配置类的注解,@Configuration,通过这个注解可以进行配置,无需xml文件的配置,可以配置拦截器,分页插件、容器的启动以及包的扫描等。
后面还学习来很多的框架,其它的框架都是基于spring框架进行简化,但是功能却增加,spring是一个可以集成其它开源框架的基础框架。