1.spring基础:spring概述+基础配置+Java配置+AOP

来源:互联网 发布:linux vi命令怎么使用 编辑:程序博客网 时间:2024/06/08 20:01
spring概述
Spring框架是一个轻量级的企业级开发的一站式解决方案。解决方法指的是可以基于Spring解决Java EE开发的所有问题。
Spring框架主要提供的技术支持:IOC容器、AOP、数据访问、Web开发、消息、测试。
Spring使用简单的POJO(Plain Old Java Object,即无任何限制的普通Java对象)来进行企业级开发。每个被Spring管理的java对象成为Bean;Spring提供了IoC容器来初始化对象,解决对象间的依赖管理和对象使用。

spring是模块化的,所以可以只使用自己需要的模块。 
(1)核心容器
    Spring-Core:核心工具类,其他模块大量使用。
    Spring-Beans:定义Bean的支持。
    Spring-Context:运行spring容器
    Spring-Context-Support:spring容器对第三包的集成支持。
    Spring-Expression:使用表达式语言在运行时查询和操作对象。
(2)数据访问/集成
    Spring-JDBC:提供以JDBC访问数据库的支持。
    Spring-TX:提供编程式和声明式的事务支持。
    Spring-ORM:提供对对象/关系映射的技术支持。
    Spring-OXM:提供对对象/xml映射的技术支持。
    Spring-JMS:提供对JMS的支持。

2.spring生态
    Spring-Boot:使用默认开发配置来实现快速开发。
    Spring-Data:对主流的关系型和NoSQL数据库的支持。
    Spring-Social:对社交网络API的集成。
    Spring-Cloud:为分布式系统开发提供工具集。

spring项目快速搭建(IDEA)
    1.新建Maven项目:File--->New--->Project---->Maven。
    
    2.输入Maven项目坐标值。
    
    3.选择存储路径。
    
    4.修改pom.xml文件,增加spring的依赖
    
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>

Spring基础配置
spring框架四大原则:
    1.使用POJO进行轻量级和最小侵入式的开发
    2.通过依赖注入和基于接口编程实现松耦合
    3.通过AOP和默认习惯进行声明式编程
    4.使用AOP和模板减少模式化代码
1.依赖注入
控制反转是通过依赖注入实现的。依赖注入指的是容器负责创建对象和维护对象之间的依赖关系,目的是“解耦和”,体现了一种“组合”理念。如当希望一个类具备某个功能时候,若继承有此功能的父类,子类将与父类耦合;若是组合一个具有此功能的类,则使耦合程度大大降低。
IoC容器负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。Spring使用配置元数据(xml、注解、Java配置、groovy配置)实现Bean的创建和注入。
元数据指的是描述数据的数据,它不具备任何可执行的能力,只能通过外界代码对这些元数据解析后进行一些有意义的操作。spring容器解析这些元数据进行Bean初始化、配置和管理依赖。
声明Bean的注解:
    1.@Component组件:没有明确的角色。
    2.@Service:在业务逻辑层(service层)使用。
    3.@Repository:在数据访问层(Dao层)使用。
    4.@Controller:在展现层(MVC->Spring MVC)使用。
注入Bean的注解(一般情况下通用):可注解在set方法或者属性上。
    1.@Autowired:Spring提供的注解。
    2.@Inject:JSR-330提供的注解。
    3.@Resource:JSR-250提供的注解。
例:
(1)编写功能类的Bean
          
   代码解释:使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。
(2)编写使用功能类的Bean
        
    代码解释:1.使用@Service注解声明当前类是Spring管理的一个Bean。
                    2.使用@Autowired将FunctionService的实体Bean注入到当前类中。
(3)配置类
        
    代码解释:1.@Configuration声明当前是一个配置类
                    2.@ComponentScan自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类并注册为Bean。
   (4)运行
        
    代码解释:1.使用AnnotationConfigApplicationContext作为spring容器,接受输入一个配置类作为参数。
                    2.获得声明配置的UseFunctionService。

Java配置:通过@Configuration和@Bean来实现的。
    1.@Configuration声明当前类是一个配置类,相当于spring的一个配置xml文件。
    2.@Bean注解在方法上,声明当前方法的返回值为一个Bean。
原则:全局配置使用Java配置(如数据库相关配置、MVC配置),业务Bean的配置使用注解配置(@Service, @Component, @Repository, @Controller)。
例:
(1)功能类的Bean(不使用@Service)
        
(2)使用功能类的Bean(不使用@Service和@Autowired)
            
(3)配置类
        
    代码解释:1.使用@Configuration注解表面当前是一个配置类,这意味着这个类里可能有0或多个@Bean注解。
                    2.使用@Bean注解声明当前方法的返回值是一个Bean,Bean的名称是方法名。
                    3.注入FunctionService的Bean时候直接调用functionService()。
                    4.注释里面是另外一种注入的方法,直接将FunctionService作为参数。在spring中,只要在容器中存在某个Bean,就可以在另一个Bean的声明方法的参数中注入。
(4)运行
        

AOP:面向切面编程,目的是为了解耦和。它可以让一组类共享相同的行为。
spring支持AspectJ的注解式切面编程:
    1.使用@Aspect声明是一个切面。
    2.使用@After, @Before, @Around定义建言(advice),可以直接将拦截规则(切点)作为参数。
    3.其中@After, @Before, @Around参数的拦截规则为切点(PointCut),为了使切点复用,可以使用@PointCut专门定义拦截规则,然后在@After, @Before, @Around的参数中调用。
    4.其中符合条件的每一个被拦截处为连接点(JointPoint)。
spring本身在事务处理(@Transcational)和数据缓存(@Cacheable等)使用注解式拦截。
例:
(1)添加spring aop 支持以及 AspectJ依赖
        
(2)编写拦截规则的注解(注解的功能来自用注解的地方)
        
(3)编写使用注解的被拦截类
        
(4)编写使用方法规则的被拦截类
        
(5)编写切面 
                   
(6)配置类
        
(7)运行
        
原创粉丝点击