注解开发bean
使用@Component定义bean
@Component("bookDao")
public class BookDaoImpl implements BookDao {}
@Component
public class BookServiceImpl implements BookService {}
核心配置文件中通过组件扫描加载bean
<context:component-scan base-package="com.pojo"/>
Spring提供
@Component注解的三个衍生注解
@Controller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义
@Repository("bookDao")
public class BookDaoImpl implements BookDao {)
@Service
public class BookServiceImpl implements BookService {)
纯注解开发-
Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道Java类代替Spring核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/eans"
xmlns:xsi="http://www.w3.org/2001/XMLSchemd instance"
xsi: schemaLocation="
http://www.springframework.org/ schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"><context:component-scan base-package='Com.lyl)"/>
<comtext:component-scan base-packge="com.lyl">
</beans>
@Configuration 代替除了<comtext:component-scan base-packge="com.lyl">配置文件的其他部分
@Componentscan("com.lyl" )代替这个<comtext:component-scan base-packge="com.lyl">
public class SpringConfig {}
@Configuration注解用于设定当前类为配置类
@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
@ComponentScan({"com.itheima.service", "com.itheima.dao"})
bean的生命周期与作用范围
使用@PostConstruct、@PreDestroy定义bean生命周期@Scope声明作用范围
@Repository
@scope("singleton")
public class BookDaoImpl implements BookDao {
public BookDaoImpl() {
System.out.println( "book dao constructor ..." );
}
@PostConstruct
public void init() {
System.out.println( "book init ..." );
}
@PreDestroy
public void destroy() {
System.out.println( "book destory ..." );
}
}
依赖注入
基本类型注入
使用 @Value
引用类型注入
使用@Autowired注解开启自动装配模式(按类型)
@Service
public class BookserviceImpl implements BookService {
@Autowired
@Qualifier("")//可以用这个注解来指定bean的名称
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println( "book service save ..." );bookDao.save();
}
}
基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
注意∶自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
加载properties文件
使用@PropertySource注解加载properties文件
@Configuration
@ComponentScan("com.lyl" )
@PropertySource("classpath :jdbc.properties")
public class SpringConfig {
}
注意∶路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*
第三方bean管理
将独立的配置类加入核心配置
方式一︰导入式
public class JdbcConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
//相关配置
return ds;
}
}
使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式
@Configuration
public class JdbcConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();//相关配置
return ds;
}
}
使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息
@Configuration
@ComponentScan({"com.lyl.config", "com.lyl.service", "com.lyl.dao"})
public class SpringConfig {}
第三方bean依赖注入
简单类型依赖注入
public class JdbcConfig {
@value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost: 3306/spring_db")
private String url;
@Value("root")
private String userName;
@Value("root")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName( driver);
ds.setUrl(url);
ds.setUsername(userName );
ds.setPassword(userName );
return ds;
}
}
引用类型依赖注入
@Bean
public DataSource dataSource(BookService bookService){
system.out.println(bookService);
DruidDataSource ds = new DruidDataSource();//属性设置
return ds;
}
引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象