赞
踩
Spring架构由诸 多模块组成,可分类为:
Spring 依赖
Groupld | Artifactld | 说明 |
---|---|---|
org.springframework | spring-beans | Beans支持,包含Groovy |
org.springframework | spring-aop | 基于代理的AOP支持 |
org.springframework | spring-aspects | 基于AspectJ的切面 |
org.springframework | spring-context | 应用上下文运行时,包括调度和远程抽象 |
org.springframework | spring-context-support | 支持将常见的第三方类库集成到Spring应用上下文 |
org.springframework | spring-core | spring-core |
org.springframework | spring-expression | Spring 表达式语言,SpEL |
org.springframework | spring-test | 单元测试和集成测试支持组件 |
org.springframework | spring-tx | 事务基础组件,包括对DAO的支持及JCA的集成 |
org.springframework | spring-web | web支持包,包括客户端及web远程调用 |
org.springframework | spring-webmvc | REST web服务及web应用的MVC实现 |
org.springframework | spring-jcl | Jakarta Commons Logging日志系统 |
(1)工厂配置文件
(2)工厂单例模式——解耦
IOC概念:
IOC作用:
IOC实现:
public class testAccountService {
/**
程序中的对象都交由Spring的ApplicationContext工厂进行创建
*/
@Test
public void testFactory(){
//1.读取配置文件中所需创建的bean对象,并获得工厂对象
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("Bean.xml");
//2. 通过id获取bean对象
AccountService accountService= (AccountService) applicationContext.getBean("AccountService");
//3.使用对象
accountService.addAccount();
}
}
ApplicationContext是Spring给我们提供的核心容器,其依赖关系如下:
我们发现ApplicationContext继承了BeanFactory。BeanFactory才是顶级容器。
(1)这两个核心的容器有什么区别呢?
(2)ApplicationContext是一个接口,其重要实现类?
(1)bean标签的scope属性:
(2)单例与多例作用域的区别
(1) 单例对象
单例对象的生命周期和容器的生命周期是一致的。 当容器创建时,对象就实例化好了。当容器还在的时候,对象也就一直存在。当容器销毁,对象也就消亡。
(2)多例对象
依赖注入:
IOC的作用:
降低程序间的耦合(依赖关系)
DI的作用:
依赖关系的管理,依赖都交给spring来维护
依赖注入的数据类型
依赖注入的方式
<!-- 复杂集合set注入--> <bean id="user" class="com.qfedu.pojo.User"> <!-- 数组set注入--> <property name="nums"> <array> <value>1</value> <value>2</value> <value>3</value> </array> </property> <!-- 集合属性注入--> <property name="list"> <list> <value>tom</value> <value>jack</value> </list> </property> <!-- set集合注入--> <property name="set"> <set> <value>12</value> <value>1</value> </set> </property> <!-- map集合注入 --> <property name="map"> <map> <entry key="tom" value="20"></entry> <entry key="jack" value="22"></entry> </map> </property> <!-- properties注入--> <property name="props"> <props> <prop key="tom">man</prop> <prop key="jack">woman</prop> </props> </property> </bean>
IOC注解可以分为以下几类:
用于创建对象的
<bean>
标签实现的功能是一样的用于注入数据的
<property>
标签的作用是一样的。用于改变作用范围的
scope
属性实现的功能是一样的和生命周期相关的
init-method
和destroy-methode
的作用是一样的。配置相关注解
包括配置jar包对象创建、注解包扫描、文件的读取
)(1)@Component
(2)Component衍生的注解
以下三个注解他们的作用和属性与@Component是一模一样,他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰。
衍生类注解源码解析
于为注解属性声明别名
它有两个属性name和value @AliasFor注解注释了自身,并且name和value 互为别名
不定义新的属性而是复用其他注解已有的注解属性(通过此种方法@Component衍生出其他注解类)
(1)@Autowired
(2)实现原理:
(1)@Qualifier
(2)@Resource
(3)@Value
(1)@Scope
(1)@PostConstruct
(2)@PreDestroy
(1)@Configuration
(2)@ComponentScan
(3)@Bean
(4)@Import
(5)@PropertySource
作用:用于指定properties文件的位置
类似配置文件中:
属性:value:指定文件的名称和路径
关键字:
示例:
(6)问题:@Configuration注解一定需要吗?
@Runwith
@ContextConfiguration
作用: 告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
属性:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。