Spring2.0之后开始了各种注解开发。2.5比较完善。3.0纯注解开发
注解作用替代bean的配置,例如本案例中,使用注解开发替代下面的bean。
在配置bean的类中添加@Component,代表上图中的bean。
步骤一:在原来的需要改变的bean创建的类中添加下图所示
步骤二:在原来的applicationContext.xml中添加一个搜索注解的代码。
步骤一:
步骤二:在程序中使用类型.class对bean进行访问
controller:表现层,也是控制层,负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
Service:服务层被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务。
Repository:数据层,用于DAO(data access object)层,比较基础的操作,具体到对于某个表的增删改查。面向的是表数据。
作用:功能和@Component的效果一样,只不过是为了方便理解。
作用:实际上就是将Spring的配置信息进行另外的一种形式的替换。使用Java类替代了Spring核心配置文件。
步骤一:
步骤二:
步骤一:在总包下创建一个配置包,并创建一个配置类。
步骤二:替换配置信息的基本内容用@Configuration,在所创建的配置类中进行添加。
步骤三:添加配置信息的基本内容信息的其他内容,比如说搜索Component的位置扫描功能。
步骤四:添加创建一个新的内容。
配置类
通过注解方式改变单例与非单例的注释。使用@Scope
下面的这个指令是非单例
bean生命周期初始化和关闭前的处理操作:两个注解的使用@PostConstruct 和 @PreDestroy
代码部分:
BookDaolmpl部分的展示:
package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Repository
@Scope("singleton")
public class BookDaolmpl implements BookDao {
@Override
public void save() {
System.out.println("book dao save ...");
}
@PostConstruct
public void init() {
System.out.println("init ...");
}
@PreDestroy
public void destroy() {
System.out.println("destroy ...");
}
}
主程序的展示:
package com.itheima;
import com.itheima.config.SpringConfig;
import com.itheima.dao.BookDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.scheduling.annotation.AnnotationAsyncExecutionInterceptor;
public class APP {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao1 = ctx.getBean(BookDao.class);
BookDao bookDao2 = ctx.getBean(BookDao.class);
System.out.println(bookDao1);
System.out.println(bookDao2);
ctx.close();
}
}
结果:
单个bean可以直接使用@Autowired进行自动装配。(如果是单个bean的,以及是按照类进行读取的,可以使用@Autowired)
方式一:
注意:多个相同的bean按照类获取的,则不能只使用@Autowired,需要多增加一个注解@Qualifier("bean名称")。
方式二:
多个相同的bean还要使用@Autowired方法的,按照名称获取的方法,可以解决多个bean自动装配的问题。
使用@Value进行注解 。
使用@Value的作用:可以将外部文件比如properties的数据传输到相应位置。
@Value的作用,可以读取properties中的文件内容。
步骤一:添加@Value注解
步骤二:添加依赖在SpringConfig中添加@Propertysource("Properties文件名称")
多个properties依赖配置的话,需要使用{ xxx,xxx,xxx}进行添加
步骤三:在类中进行修改,把properties的数据信息引用到类中。
创建properties文件:将文件的后缀进行修改成.properties即可。
步骤一:首先将第三方的bean在pom.xml进行导包。
步骤二:在SpringConfig中进行导入第三方bean的配置注解。@Bean
注意:添加@Bean,其当前该方法的返回值就是一个bean
//1、定义一个方法获得要管理的对象
//2、添加@Bean,其当前该方法的返回值就是一个bean
@Bean("dataSource")//既可按照名称,又可以是按照类
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mtsql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("root");
return ds;
步骤三:在主函数中就像bean一样处理使用即可。
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource);
}
结果如下:
在config包下创建一个类,把之前在SpringConfig所配置的文件都移动到到新创建JdbcConfig包下。
然后在原来的SpringConfig下添加@ComponentScan("JdbcConfig的位置")。JdbcConfig也要有@Configuration。
注:这种不推荐使用!
步骤一:
将写好的关于第三方bean的方法写入到新创建的需要配置的第三方类当中。
//1、定义一个方法获得要管理的对象
//2、添加@Bean,其当前该方法的返回值就是一个bean
@Bean("dataSource")//既可按照名称,又可以是按照类
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mtsql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("root");
return ds;
步骤二:
在SpringConfig中使用注解@Import({导入第三方包的类的名称.class})