文章目录
纯注解开发模式
Spring3.0开启了纯注解开发模式,使用Java类替代配置文件
1.定义bean
原来是用配置文件的方式定义bean(applicationContext.xml)
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
注解开发模式下,使用@Component定义bean,设置该类为spring管理的bean。
对于@Component注解,还衍生出了其他三个注解
@Controller、@Service、@Repository
分别对应表现层、业务层、数据层。
@Repository("bookDao")
//@Scope设置bean的作用范围,默认是单例
@Scope("prototype")
public class BookDaoImpl implements BookDao {
}
@Service
public class BookServiceImpl implements BookService {
}
在config包下创建配置类SpringConfig。
添加@Configuration注解,设置该类为spring配置类。
添加@ComponentScan注解,设置spring配置类扫描路径,用于加载bean。
/*
* 纯注解开发
* 组件扫描*/
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}
2.依赖注入
2.1 自动装配
原来是用配置文件的方式完成service和dao之间的绑定
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" scope="prototype">
<!--配置service与dao的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体属性(BookServiceImpl.java)属性的名称
ref属性表示参照哪一个bean(applicationContext.xml) 容器中对应的bean的名称-->
<property name="bookDao" ref="bookDao"/>
</bean>
也可以选择自动装配
<bean class="com.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
注解开发模式下,使用@Autowired注解自动装配,并且不需要提供setter方法。
其中,可以使用@Qualifier指定绑定哪一个bean,按照名称注入
注意:@Qualifier不能独立使用,必须和@Autowired一起使用
@Repository("bookDao2")
public class BookDaoImpl implements BookDao {
}
@Service
public class BookServiceImpl implements BookService {
//自动装配 set方法都不需要了
@Autowired
//@Q 指定bean
@Qualifier("bookDao2")
private BookDao bookDao;
// public void setBookDao(BookDao bookDao) {
// this.bookDao = bookDao;
// }
}
2.2 简单数据类型注入
原来配置文件的方式注入简单数据类型(基本数据类型或者字符串类型)
public class BookDaoImpl implements BookDao {
//注入简单类型
private String databaseName;
private int connectionNum;
//setter注入需要提供要注入对象的set方法
public void setConnectionNum(int connectionNum) {
this.connectionNum = connectionNum;
}
//setter注入需要提供要注入对象的set方法
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
<!--注入简单类型-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<!--property标签:设置注入属性-->
<!--name属性:设置注入的属性名,实际是set方法对应的名称-->
<!--value属性:设置注入简单类型数据值-->
<property name="connectionNum" value="100"/>
<property name="databaseName" value="mysql"/>
</bean>
注解开发模式下,使用@Value注解注入,将值写入注解的参数中就行了
//简单类型bean
@Value("kyrie")
private String username;
@Value一般会被用在从properties配置文件中读取内容进行使用
例如,jdbc.properties(一般在resources目录下)
name=itheima888
要使用里面的数据,首先要在配置类上添加@PropertySource注解
@Configuration
@ComponentScan("com.itheima")
//加载properties文件
@PropertySource("jdbc.properties")
public class SpringConfig {
}
使用@Value读取jdbc.properties中的内容
@Repository("bookDao2")
public class BookDaoImpl implements BookDao {
//简单类型bean
@Value("kyrie")
private String username;
//加载properties文件中数据
@Value("${name}")
private String name;
public void save() {
System.out.println("book dao save ...."+username+" "+name);
}
}
测试结果:
3.注解开发管理第三方bean
完成对Druid数据源的管理
3.1 导入druid坐标(pom.xml)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
3.2 创建一个新的配置类,定义一个方法获得要管理的对象(JdbcConfig.java)
其实也可以把这个方法就放在SpringConfig类里面,但将来会有很多这样的配置,如果都放在SpringConfig里面,这个类就写爆了。
为了方便阅读和管理,单独放在一个配置类里面。
//@Configuration
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("123456")
private String Password;
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法返回值是一个bean
//引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动转配对象
@Bean
public DataSource dataSource(BookDao bookDao){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(Driver);
ds.setUrl(Url);
ds.setUsername(Username);
ds.setPassword(Password);
return ds;
}
}
注意:
1.方法上方要加@Bean注解,表示当前方法返回值是一个bean
2.类上方@Configuration可以省略,但是必须在Spring配置类上使用@Import注解手动引入
需要加载的配置类。如果不用@Import,就要加上@Configuration,然后在SpringConfig配置类的@ComponentScan注解上扫描到config包,以至于能扫描到JdbcConfig配置类
@Configuration
//@ComponentScan("com.itheima.config")
//导入式
@Import({JdbcConfig.class})
@ComponentScan("com.itheima")
public class SpringConfig {
}
3.引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象。
总结
功能 | XML配置 | 注解 |
---|---|---|
定义bean | bean标签: id属性 class属性 | @Configuration @Component @Controller @Service @Repository @ComponentScan |
设置依赖注入 | setter注入(set方法) 构造器注入(构造方法) | @Autowired @Qualifier @Value |
配置第三方bean | bean标签 | @Bean @Import |
作用范围 | scope属性: singleton prototype | @Scope |