spring-IOC使用注解
一、注解开发定义bean
1、使用@Component注解定义bean
@Component("bookDao")
public class BookDaoImpl implements BookDao {
}
@Component
public class BookServiceImpl implements BookService {
}
2、核心配置文件中通过组件扫描加载bean
<context:component-scan base-package="org.example"/>
3、spring提供@Component注解的三个衍生注解
@Controller——用于表现层bean定义
@Service——用于业务层bean定义
@Repository——用于数据层bean定义
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
}
@Service
public class BookServiceImpl implements BookService {
}
二、纯注解开发
1、java类替代配置文件
Spring3.0开启了纯注解开发模式,使用java类替代配置文件,开启了Spring快速开发赛道,就是那个麻烦的配置文件不用写了
@Configuration
@ComponentScan("org.example")
public class SpringConfig {
}
//@Configuration注解用于设定当前类为配置类
//@ComponentScan注解用于设定扫描路径,此注解只能添加一次,如果是多个就用数组格式
2、初始化容器对象切换为读取Java配置类初始化容器对象
//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//加载配置类初始化容器(括号里面的内容改成这个样子)
Applicationcontext ctx= new AnnotationconfigApplicationContext(SpringConfig.class);
三、使用注解依赖注入
1、引用类型
(1)、使用@Autowired注解开启自动装配模式
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
/*public void setBookDao(BookDao bookdao) {
this.bookDao = bookdao;
}*/
@Override
public void save() {
System.out.println("book service save...");
bookDao.save();
}
}
注意:
自动装配是基于反射设计的创建对象并暴力反射对应的属性为私有属性初始化数据,因此无需提供setter方法。
自动装配建议使用无参构造方法创建对象,如果不提供对应的构造方法,要提供唯一的构造方法。
(2)、使用@Qualifier注解开启指定名称装配bean
@Service
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier
private BookDao bookDao;
}
注意:@Qualifier注解必须配合@Autowired注解使用。
2、简单类型
(1)、使用@Value注解实现简单类型的注入
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
@Value("999")
private String name;//用于简单类型的依赖注入
public void save() {
System.out.println("book dao save..."+name);
}
}
(2)、使用@PropertySource注解加载外部Properties文件
@Configuration
@ComponentScan("org.example")
@PropertySource("jdbc.properties")
public class SpringConfig {
}
注意:路径仅支持单一的文件配置,多个文件使用数组格式,并且不允许使用通配符*。
四、第三方管理bean
1、使用@Bean配置第三方bean
(1)、编写独立的类
package org.example.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
//1、定义一个方法获得要管理的对象
@Bean//2、添加bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/heihei");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
}
(2)、 Springconfig配置类中用@Import注解
@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {
}
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext c=new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource dataSource = c.getBean(DataSource.class);
System.out.println(dataSource);
}
}
四、第三方bean依赖注入
1、简单类型依赖注入
public class JdbcConfig {
@Value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost:3306/heihei")
private String url;
@Value("root" )
private String userName;
@Value("123456")
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;
}
2、引用类型依赖注入
@Bean
public DataSource dataSource(BookService bookService){
Systen.out.println(bookService);
DruidDataSource ds = new DruidDataSource( );
//属性设置
return ds;
}
注意:引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象