目录
一、项目中注解和XML选择问题
学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一
样的,都是要降低程序间的耦合。只是配置的形式不一样。
关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 , 所以这两种配置方式我们都需
要掌
握。
注解的优势: 配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
xml的优势:
修改时,不用改源码。不涉及重新编译和部署。
二、用于创建对象的注解
@Component,@Repository,@Service,@Controller
注解 | 说明 |
@Component | 使用在类上用于实例化Bean |
@Controller | 使用在web层类上用于实例化Bean |
@Service | 使用在service层类上用于实例化Bean |
@Repository | 使用在dao层类上用于实例化Bean |
三、用于注入数据的注解
@Value,@Resource,@Autowrited,@Qualifier
注解 | 说明 |
@Value | 注入普通属性 |
@Autowrited | 自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id, 在 spring 容器查找,找到了也可以注入成功。找不到就报错 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Resource | 相当于@Autowired+@Qualifier,按照名称进行注入 |
四、 用于改变作用范围的注解
注解 | 说明 |
@Scope | 标注Bean的作用范围,scope取值singleton prototype request session globalsession |
五、新注解说明
@Configuration,@ComponentScan,@Import, @Bean, @PropertySource
注解 | 说明 |
@Configuration | 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定 Spring在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配 置文件中的 <context:component-scan base-package="com.offcn"/>一 样 |
@Bean | 使用在方法上,标注将该方法的返回值存储到 Spring容器中 |
@PropertySource | 用于加载xxx.properties 文件中的配置 |
@Import | 用于导入其他配置类 |
六、其他注解
注解 | 说明 |
@PostConstruct | 该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。 |
@JsonProperty | 注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别) |
@NotNull(message = "订单ID不能为空") | 判空(值不能为空) |
@SneakyThrows | 注解是由lombok为咱们封装的,它能够为咱们的代码生成一个try...catch块,并把异常向上抛出来 |
@CrossOrigin | 跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或JSONP。 |
@SuppressWarnings | 注解是jse提供的注解。作用是屏蔽一些无关紧要的警告。使开发者能看到一些他们真正关心的警告。从而提高开发者的效率 |
dubbo注解
注解 | 说明 |
@Reference | 注入的是分布式中的远程服务对象 |
@Transactional
该注解的属性和 xml 中的属性含义一致。该注解可以出现在接口上,类上和方法上。
出现接口上,表示该接口的所有实现类都有事务支持。
出现在类上,表示类中所有方法有事务支持
出现在方法上,表示方法有事务支持。
以上三个位置的优先级:方法>类>接口
1) 事务开始时,通过AOP机制,生成一个代理connection对象,
并将其放入 DataSource 实例的某个与 DataSourceTransactionManager 相关的某处容器中。
在接下来的整个事务中,客户代码都应该使用该 connection 连接数据库,
执行所有数据库命令。
[不使用该 connection 连接数据库执行的数据库命令,在本事务回滚的时候得不到回滚]
(物理连接 connection 逻辑上新建一个会话session;
DataSource 与 TransactionManager 配置相同的数据源)
2) 事务结束时,回滚在第1步骤中得到的代理 connection 对象上执行的数据库命令,
然后关闭该代理 connection 对象。
(事务结束后,回滚操作不会对已执行完毕的SQL操作命令起作用)