
spring注解开发,减少在xml文件里的各种繁琐配置,不过呢有利也有弊,我们都需要学习。
首先我们使用@Component来实现bean标签的替换,当然这个是万能的,在web层,service层,dao层都可以使用。不过有其他三个更加细致的对不同层进行了注解配置
web层:@Controller
service层:@Service
Dao层:@Repository
这三个具体到了不同的层,见名知意,推荐使用
再者是DI依赖注入,之前是通过写set方法然后xml中使用ref进行各种配置的,现在我们只需要在属性的上面加一个@Autowired就可以啦,这是最基础也是最简单的一个,通过类型进行依赖注入。当然设计到多选一的时候,我们可以使用@Resouce(写对应的id),唯一选择嘛。
这些配置的前提是需要进行包扫描
在xml中书写
context:component-scan base-package=“路径”,这样就可以完成半注解半xml配置的spring开发啦。如果你想把包扫描也搞成注解形式,那么需要写一个等同xml配置的类,在它的上面写@ComponentSan(对应的扫描路径),同时需要写@Configration,表明这是spring核心配置类
想引用其他配置文件,需要写上@Import(“其他配置文件名class”),通过反射获取内容。
综合来说,配置类需要写三个注解
@Configration
@ComponentScan(包扫描路径)
@Import(其他配置类class)
public class SpringConfigration(){
里面写对应的内容,比如复杂对象的创建对象返回(用到@bean)等等
}
以上就是小白对spring的初步理解,有一些可能错误不对的地方还需要进行调整与深入理解。继续加油,继续学习吧
Spring如何使用注解机制完成自动装配
Java实例构造时会调用默认父类无参构造方法,Spring正是利用了这一点,让" *** 作元素的代码"得以执行。
两种处理策略
(1)类级别的注解:如@Component、@Repository、@Controller、@Service以及JavaEE6的@ManagedBean和@Named注解,都是添加在类上面的类级别注解。
Spring容器根据注解的过滤规则扫描读取注解Bean定义类,并将其注册到Spring IoC容器中。
(2)类内部的注解:如@Autowire、@Value、@Resource以及EJB和WebService相关的注解等,都是添加在类内部的字段或者方法上的类内部注解。
SpringIoC容器通过Bean后置注解处理器解析Bean内部的注解。
Spring实现@Autowire解析和注入的核心的类是通过AutowiredAnnotationBeanPostProcessor来实现的。
我们可以通过其方法列表看出,其中对字段的注入,对属性的注入,还有选择相应的构造方法来注入。
1,从构造方法的缓存中查询其构造方法
2,若缓存中不存在,则根据反射获取所有构造方法
3,遍历所有构造方法,查询器是否含有@Autowired属性
4,判断Autowired注解中指定了required属性 (required属性就是判断是否强依依赖)若存在required就使用默认构造方法。
5,返回指定的构造方法
注入的时候则是通过inject方法来实现。
================================================================================================================================
Spring对注解的支持主要都是通过反射来获取相应的注解,来做相应的处理,我们的工程中大部分都是使用@Service 和@Autowired来使用,其实我们还可以使用到其他的注解来加快我们的开发,满足我们的多样性需求。
annotation是挺简单的东西其实就是个声明。然后通过反射去取那些声明了值。
autowire其实也是这个意思。通过反射去看你autowire的方式,通过定义的方式,去给你声明的变量赋值。
通过java的反射机制相关的API来访问Annotation信息。
相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。
Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annotation是“不起作用”的,只能通过配套的工具才能对这些Annotation类型的信息进行访问和处理。
注解本身不做任何事情,只是像xml文件一样起到配置作用。
注解代表的是某种业务意义,注解背后处理器的工作原理如上源码实现:
——首先解析所有属性,判断属性上是否存在指定注解。
——如果存在则根据搜索规则取得bean,然后利用反射原理注入。
——如果标注在字段上面,也可以通过字段的反射技术取得注解,根据搜索规则取得bean,然后利用反射技术注入。
================================================================================================================================
Spring 30 新增了另外两个实现类:AnnotationConfigApplicationContext 和 AnnotationConfigWebApplicationContext。从名字便可以看出,它们是为注解而生,直接依赖于注解作为容器配置信息来源的 IoC 容器初始化类。由于 AnnotationConfigWebApplicationContext 是 AnnotationConfigApplicationContext 的 web 版本,其用法与后者相比几乎没有什么差别,因此本文将以 AnnotationConfigApplicationContext 为例进行讲解。
我们需要在用于指定配置信息的类上加上 @Configuration 注解,以明确指出该类是 Bean 配置的信息源。并且 Spring 对标注 Configuration 的类有如下要求:
配置类不能是 final 的;
配置类不能是本地化的,亦即不能将配置类定义在其他类的方法内部;
配置类必须有一个无参构造函数。
AnnotationConfigApplicationContext 将配置类中标注了 @Bean 的方法的返回值识别为 Spring Bean,并注册到容器中,受 IoC 容器管理。@Bean 的作用等价于 XML 配置中的 <bean/> 标签。
在一般的项目中,为了结构清晰,通常会根据软件的模块或者结构定义多个 XML 配置文件,然后再定义一个入口的配置文件,该文件使用 <import/> 将其他的配置文件组织起来。最后只需将该文件传给 ClassPathXmlApplicationContext 的构造函数即可。
针对基于注解的配置,Spring 也提供了类似的功能,只需定义一个入口配置类,并在该类上使用 @Import 注解引入其他的配置类即可,最后只需要将该入口类传递给 AnnotationConfigApplicationContext。
@Configuration
@Import({BookStoreServiceConfigclass,BookStoreDaoConfigclass})
public class BookStoreConfig{ … }
================================================================================================================================
>
公众号
面试官:说说 startActivity 吧
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)