spring 注解开发
注解启动时使用注解的形式替代xml配置,
将繁杂的spring配置文件从工程中彻底消除掉,简化书写
配置文件
<bean id="userservise"class="UserSeryiceImpl"scope="prototype"init-method="init"destroy-method="destroy"/>
id="userservise"class=“UserSeryiceImpl” 用注解 @Component(userService)代替 这里面的userService就是之前配置文件中的id值,这个注解要写在他的实体类上面,
scope=“prototype” 用注解 @Scope(“prototype”)代替 这要写到类的顶上
init-method=“init” 用注解 @PostConstruct代替 这要写到方法的顶上
destroy-method=“destroy” 用注解 @PreDestroy代替 这要写到方法的顶上
注解驱动的弊端
1.为了达成注解驱动的目的,可能会将原先很简单的书写,变的更加复杂2.XML中配盂第三方开发的资源是很方便的,但使用注解驱动无法在第三方开发的资源中进行编辑,因此会增大开发工作呈
spring中 实用的注解
启动注解功能启动
注解扫描,加载类中配适的注解项
<context: component-agan base-pakage="pakageNane"/>
这是context标签配置注解项,这么才能在类中使用spring的注解
component-agan 是扫描组建的意思
base-pakage="pakageNane"这是告诉文件对代码的那个包进行扫描
这个会将这里面的所有包,一起扫描
说明:
·在进行包所,描时,会对配置的包及其子包中所有文件进行扫描
扫描过程是以文件夹递归迭代的形式进行的,
扫描过程仅读取合法的java文件,
扫描时仅读取spring可识别的注解,
扫描结束后会将可识别的有效
注解
1.转化为spring对应的资源加入loC容器注意:,无论是注解格式还是XMI配五格式,最终都是将资源加载到oC容器中,差别仅仅是数据读取方式不同
2.从加载效率上来说注解优于XMLEE文件
<context:component-scan base-package-“com.itheima”/>
com.itheima 这么写是需要加载多个类时,他们共同的父类包名
bean的定义
名称: @Component @Controller @Service @Repository
类型:类注解
位置:类定义上方
作用:设置该类为spring管理的bean
范例:
@component
public class className { }
说明:
@Controller,
@Service、
@Repository是@Component的衍生注解,功能同@Component
相关属性 value (默认) :定义bean的访问id
注解中定义bean就是 通过注解取代配置文件bean标签的功
@Component = bean标签
@Component(bookDao) = bean标签 bookDao=bean标签id值
有了@Component 就不用在配置文件 这么来将实体类输入bean标签
@Controller,
@Service、
@Repository
这三个注解都等于@Component
@Controller, 这是写到 表现层的类上
@Service、 这是写到 业务层的类上
@Repository 这是写到 数据层的类上
@Scope这是定义作用域的注解,写在类的上方,就是原来bean标签的scope,定义单列还是非单列的。
定义bean对应的生命周期
init-method=“init” == @PostConstruct代替 这要写到方法的顶上
destroy-method=“destroy” == @PreDestroy代替 这要写到方法的顶上
//定义bean,后面添加bean的id
@Component(“userService”)
//设定bean的作用域
@Scope(“singleton”)
//设定bean的生命周期
@PreDestroy
public void destroy(){
System.out.println(“user service destroy…”);
}
//设定bean的生命周期
@PostConstruct
public void init(){
System.out.println(“user service init…”);
}
用注解加载第三方资源
加载第三方资源用 @bean注解
@bean(“dataSource”) 这是写在方法上的
作用:设置这个方法返回值作为spring管理的bean
说明
因为第二方bean无法在其源码上进行修改,使用@Bean解决第二方bean的引入问题,
该注解用于替代XMI配五中的静态工厂与实例工厂创建bean,不区分方法是否为静态或非静态
@Bean所在的类必须被spring扫描加哦,否则该注解无法生效
相关属性◆ value (默认) :定义bean的访问id
先要在pom中写出druid的坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
在配置文件中加载 druid这个第三方资源
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- ....... -->
</bean>
在写出一个类对druid中的数据进行获取
这个是用来获取数据库连接的,跟jdbc的工具类一样的作用
用@bean注解是将这个方法加到spring中受spring的控制
dataSource 这是给这个bean注解取的名字
@component这是用来加载这个类的,缺少@component和@Bean(“dataSource”)就不会被spring识别到
@component
public class JDBCConfig {
@Bean("dataSource")
public static DruidDataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("itheima");
return ds;
}}