SSM的学习(一)—spring包的详解和注解
所述核心容器由以下部分组成spring-core, spring-beans,spring-context,spring-context-support,和spring-expression (弹簧表达式语言)模块。
spring-core和spring-beans模块提供框架的基本零件,包括IOC和依赖注入特征。这 BeanFactory是工厂模式的复杂实现。它消除了对编程单例的需要,并允许您将依赖项的配置和规范与实际程序逻辑脱钩。
AOP和仪器
该spring-aop模块提供了一个符合AOP Alliance要求的面向方面的编程实现,例如,您可以定义方法拦截器和切入点,以完全分离实现应分离功能的代码。使用源级元数据功能,您还可以以类似于.NET属性的方式将行为信息合并到代码中。
单独的spring-aspects模块提供与AspectJ的集成。
该spring-instrument模块提供了在某些应用程序服务器中使用的类检测支持和类加载器实现。
该spring-instrument-tomcat 模块包含Spring的Tomcat的检测代理。
消息传递
Spring框架4包括spring-messaging从关键抽象模块 Spring集成项目,例如Message,MessageChannel,MessageHandler,和其他人作为基于消息的应用奠定了基础。该模块还包括一组注释,用于将消息映射到方法,类似于基于Spring MVC注释的编程模型。
数据访问/集成
所述数据访问/集成层由JDBC,ORM,OXM,JMS和交易模块。
该spring-jdbc模块提供了JDBC抽象层,从而无需进行繁琐的JDBC编码和数据库供应商特定错误代码的解析。
该spring-orm模块为流行的对象关系映射 API(包括JPA, JDO和Hibernate)提供了集成层 。使用该spring-orm模块,您可以将所有这些O / R映射框架与Spring提供的所有其他功能结合使用,
该spring-oxm模块提供了一个抽象层,该抽象层支持对象/ XML映射实现,例如JAXB,Castor,XMLBeans,JiBX和XStream。
该spring-jms模块(Java Messaging Service)包含用于生成和使用消息的功能。从Spring Framework 4.1开始,它提供了与spring-messaging模块的集成 。
网络
所述网络层由的spring-web,spring-webmvc,spring-websocket,和 spring-webmvc-portlet模块。
该spring-web模块提供了面向Web的基本集成功能,例如多部分文件上传功能以及使用Servlet侦听器和面向Web的应用程序上下文对IoC容器进行初始化。它还包含一个HTTP客户端和Spring远程支持的Web相关部分。
该spring-webmvc模块(也称为Web-Servlet模块)包含Spring的model-view-controller(MVC)和针对Web应用程序的REST Web Services实现。Spring的MVC框架在域模型代码和Web表单之间提供了清晰的分隔,并与Spring框架的所有其他功能集成在一起。
该spring-webmvc-portlet模块(也称为Web-Portlet模块)提供要在Portlet环境中使用的MVC实现,并镜像该spring-webmvc模块的功能。
测试
该spring-test模块支持Spring组件与JUnit或TestNG 的单元测试和 集成测试。它提供了Spring ApplicationContexts的一致加载以及这些上下文的缓存。它还提供了可用于单独测试代码的模拟对象。
@Configuration
配置类注解,作用相当于applicationContext.xml
如果是springboot项目,想要使@bean注入到spring容器中可以把此注解和@ComponentScan(basePackages = “com.xx.bean”)
如果是java项目需要用
AnnotationConfigApplicationContext xtc = new AnnotationConfigApplicationContext(xxx类.class);
xtc.getBean();
来实现配置的加载。。
此代码表示扫描com.yangyang下的所有包,但不包括Controller包
@ComponentScan(basePackages = "com.yangyang",useDefaultFilters = true,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
对象注入
1:@Autowired 按类型去查找,然后赋值,要求只可以有一个对象
2:@Resources按名称去查找,默认情况下,定义的变量名就是查找名称,可以在@Resources注解后手动指定(当一个类存在多个实例就可以用改注解也可以用@Autowired搭配@Qualifier来使用)
自动化扫描
@Component当你希望在自动化扫描时,service能注册到spring容器中。
以下四个功能类似,但为了区分层级分为以下四种
- @Component 总有些类不在特定的层中,可以使用该注解
- @Repository 在Dao层上添加该注解
- @Service 在Service层上添加该注解
- @Controller 在Controller层上添加该注解
@Configuration 和 @ComponentScan
一般springboot项目的启动类上添加该注解。
@Configuration
@ComponentScan(basePackages = "要扫描的包的路径")
通过@ComponentScan注解指定要扫描的包(如果不指定,默认扫描配置类所在包下的Bean,以及配置类包下,子包,下的类)