接下来讲解spring'框架的简化开发的结构---纯注解开发模式
即使用注解代替bean配置
在类定义中引入注解
@Component("bookDao")//引入注解,同时指定其在bean配置的id,相当于简化了bean配置
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
而在配置文件中,则需要扫描导入注解
<context:component-scan base-package="com.itheima"/>
这行代码就是导入了/com/itheima目录下的所有注解,支持多注解导入
于是在bookserviceimpl中也可以使用注解来引入
同时,spring为了方便区分业务层类,操作层类等,提供了不同的component衍生类,和componnet类功能相同,只是名称不同
对于bookserviceimpl可以使用@Service(dao可以使用@Repository),可以不指定id,后面按类型获取
@Service
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
BookService bookService = (BookService) ctx.getBean(BookService.class);
关于注解开发的生命周期,和bean配置类似
1.作用范围---单例与多例(singleton and protodo)
可以使用@Scope来指定
2.初始化与销毁方法
在类中写上方法,同时使用@PostConstruct和@PreDestroy来注解
类的定义
package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Repository
//@Scope设置bean的作用范围
@Scope("singleton")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
//@PostConstruct设置bean的初始化方法
@PostConstruct
public void init() {
System.out.println("init ...");
}
//@PreDestroy设置bean的销毁方法
@PreDestroy
public void destroy() {
System.out.println("destroy ...");
}
}
引入其他类
注解引入别人写的类时,我们可以通过这样的模式,定义SpringConfig类来充当配置文件
package com.itheima.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @ComponentScan("com.itheima") public class SpringConfig { }
这里也可以使用扫描,然后我们再定义一个引入其他类的类文件jdbcConfig类
package com.itheima.config;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
public class jdbcConfig {
@Bean//使用@bean来进行注解
public DataSource dataSource(){
DruidDataSource ds=new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jbnc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
这里其实还可以使用
@Import(jdbcConfig.class)来精确引入
第三方bean的注解注入
引入类
引用类型注入比较简单,spring框架可以智能识别形参引入类
下图可以看出,注解开发确实方便许多