Spring-注解开发
原始注解
原始注解主要是来替代Bean标签的配置
注解 | 说明 |
---|---|
@Component | 使用在类上,用于实例化Bean |
@Contorller | 使用在web层类上,用于实例化Bean |
@Service | 使用在service层类上,用于实例化Bean |
@Repository | 使用在Dao层类,用于实例化Bean |
@Autowired | 使用在字段上,用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用,用于根据名称依赖注入 |
@Resource | 相当于@Autowired+@Qualifier |
@Value | 注入普通属性 |
@Scope | 标柱Bean的作用范围 |
@PostConstruct | 使用在方法上,标注该方法是Bean的初始方法 |
@PreDestroy | 使用在方法上,标注该方法是Bean的销毁方法 |
我们事先创建好UserDao和UserService接口和它们的实现类UserDaoImpl、UserServiceImpl
配置组建扫描
<?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.sjj" />
</beans>
简单演示
package com.sjj.dao.impl;
import com.sjj.dao.UserDao;
import org.springframework.stereotype.Component;
@Component("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void userDaoTest() {
System.out.println("测试");
}
}
package com.sjj.service.impl;
import com.sjj.dao.UserDao;
import com.sjj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component("userService")
public class UserServiceImpl implements UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void UserServiceTest() {
userDao.userDaoTest();
}
}
package com.sjj.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceTest {
@Test
public void test_1(){
ApplicationContext app = new ClassPathXmlApplicationContext("appContext.xml");
UserService userService = (UserService) app.getBean("userService");
userService.UserServiceTest();
}
}
新注解
在原始注解的基础上我们考虑,
如果我们使用第三方的包,难道要在第三方包的源码中加注解吗?这显然会玷污了源码的清白。
非自定义的Bean标签如何表示?加载properties的配置如何表示?扫描组件的配置如何表示?
所以我们选择使用新注解。
注解 | 说明 |
---|---|
@Configuration | 用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定Spring在初始化容器时要指定的包。 |
@Bean | 使用在方法上,标注该方法的返回值存储到Spring容器中 |
@PropertySource | 用于加载properties文件 |
@Import | 用于导入其他配置类 |
简单演示
导入mysql、c3p0配置,编写好你的jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名称
jdbc.username=用户
jdbc.password=密码
创建一个DataSourceConfig类作为数据源的配置类
package com.sjj.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
// 加载配置文件:<context:property-placeholder location="jdbc.properties" />
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")
public DataSource getDataSource() throws Exception{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
}
创建一个SpringConfig类作为Spring的核心配置类
package com.sjj.config;
/**
* Spring核心配置类
*/
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
// 标志该类是Spring的核心配置类
@Configuration
// 组件扫描:<context:component-scan base-package="com.sjj" />
@ComponentScan("com.sjj")
// 加载其它配置类
@Import(DataSourceConfig.class)
public class SpringConfig {
}
测试方法
import com.sjj.config.SpringConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@Test
public void test_2() throws SQLException {
// 参数是核心配置类的class
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = app.getBean(UserService.class);
userService.UserServiceTest();
// DataSource参数返回到了Bean标签
DataSource source = (DataSource) app.getBean("dataSource");
Connection connection = source.getConnection();
System.out.println(connection);
connection.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现