Spring MVC入门(注解开发)
一、入门
1. 使用@Component
定义bean
代码语言:javascript复制@Component("bookDao")
public class BookDaoImpl implements BookDao {
...
};
2. 核心配置文件中通过组件扫描bean
代码语言:javascript复制<context:component-scan base-package="com.cikain"/>
3. @Component
注解的三个衍生注解
@Controller
:用于表现层bean定义@Service
:用于业务层bean定义@Repository
:用于数据层bean定义
三个衍生注解与
@Component
用法与功能一样,名称不同,易于区分
二、 简化(配置类)
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<context:component-scan base-package="com.cikian"/>
</beans>
同等于
代码语言:javascript复制@Configuration
@ComponentScan("com.cikian")
public class SpringConfig {
};
使用配置类时
代码语言:javascript复制public class App {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookService bookService = ctx.getBean(BookService.class);
bookService.save();
};
};
注意:
@
Configuration用于设定当前类为配置类
@ComponentScan
注解用于设定扫描路径,此注解只能添加一次,多个数据用数组格式,如:
@ComponentScan({"com.cikian.service","com.cikian.dao"};)
三、纯注解控制bean生命周期
代码语言:javascript复制@Component
@Scope("singleton")
public class BookServiceImpl implements BookService {
private BookDao bookDao;
@Override
public void save() {
System.out.println("BookServiceImpl save");
bookDao.save();
};
@PostConstruct
public void init() {
System.out.println("BookServiceImpl init");
};
@PreDestroy
public void destroy() throws Exception {
System.out.println("BookServiceImpl destroy");
};
};
@Scope
注解控制bean单例或非单例@PostConstruct
定义bean初始方法@PreDestroy
定义bean销毁方法
四、依赖注入(自动装配)
1. 注入引用类型
代码语言:javascript复制public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
public void save() {
System.out.println("BookServiceImpl save");
bookDao.save();
};
};
注意:使用注解注入依赖时,对私有属性进行暴力反射初始化私有属性,所以可以不需要setter方法。自动装配默认按类型注入,假设有多个类型相同的bean,Spring支持俺名称装配,使用
@Qualifier
注解指定名称,此注解依赖@Autowired
注解
2. 注入简单类型(值类型)
使用@Value
注解,如:
public class BookServiceImpl implements BookService {
@Value("book_name")
private String name;
};
3. 加载配置文件
在配置类中使用@PropertySource
注解加载外部配置文件,如:
@Configuration
@ComponentScan("com.cikian")
@PropertySource("jdbc.properties")
public class SpringConfig {
};
多个配置文件使用数组格式:
@PropertySource({"jdbc.properties","jdbc2.properties","jdbc3.properties"})
不支持使用通配符!
五、管理第三方bean
1. 配置bean
使用druid举例,举例仅为常用方法
新建配置类JdbcConfig类
代码语言:javascript复制public class JdbcConfig {
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/cikian");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
};
};
在此配置类中创建方法,方法返回值为所需要的bean,并在方法上方使用@Bean注解
。可使用@Bean("bean名称")
给bean设置名称。
在Spring配置类中导入JdbcConfig类
代码语言:javascript复制@Configuration
@Import({JdbcConfig.class};)
public class SpringConfig {
};
使用@Import
注解导入配置,@Import({})
导入多个配置以数组格式传递参数。
2. 第三方bean注入依赖
简单类型使用@Value
注解,引用类型给出形参即可。
public class JdbcConfig {
@Value("${jdbc.driverClassName};")
private String driverClassName;
@Value("${jdbc.url};")
private String url;
@Value("${jdbc.username};")
private String username;
@Value("${jdbc.password};")
private String password;
@Bean
public DataSource dataSource(BookService bookService){
System.out.println(bookService);
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
};
};