文章目录
Spring IOC注解
1.开启注解功能
<!--启动注解扫描-->
<context:component-scan base-package="com.lxk"></context:component-scan>
说明:
在进行包的扫描时,会对配置的包以及子包的所有文件进行扫描
扫描过程是以文件的递归的形式进行的
扫描过程仅读取合法的Java文件
扫描时仅能识别Spring 可识别的注解
扫描结束后将可识别的有效注解转化成Spring对应的资源加入到容器
注意:
无论使用注解开发还是XML配置开发,最终都是将资源加载到Spring容器。两者区别只是读取的方式不同
从加载效率上来说注解开发要优于XML配置文件
2.常用的注解
2.2 bean的定义
名称:@Component,@Repository,@Service,@Controller
类型:类注解
位置:类定义上方
作用:设置该类为Spring 管理的bean
实例:
@Component("beanID")
public class ClassName {
}
说明:@Repository,@Service,@Controller是@Component的衍生注解。功能和@Component相同
相关属性:value():定义bean访问的id
2.3 bean 的作用域
名称:@Scope
类型:类注解
位置:类定义上方
作用:设置该类作为bean对应scope属性(设置该类产生对象的作用域)
实例:
@Scope
public class ClassName {
}
//默认值为singleton
2.4 bean 的生命周期
名称:@PostConstruct,@PreDestroy
类型:方法注解
位置:方法定义上方
作用:设置该类作为bean对象对应的生命周期的方法
实例:
@PostConstruct
public void initmethod() {
//在系统创建对象之后执行的方法
System.out.println("123");
}
@PreDestroy
public void destorymethod() {
//系统销毁对象之前执行的方法
}
2.5加载第三方资源
名称:@Bean
类型:方法注解
位置:方法定义上方
作用:设置该方法的返回值作为Spring管理的bean
实例:
@Bean("datasource")
public DruidDataSource getDruidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
说明:
因为第三方的bean无法在其源码上进行修改,使用@Bean解决第三方bean的引入问题
@Bean所在的类必须被Spring扫描加载到,否则该注解无法生效
2.6 加载资源文件和注入
名称:@PropertySource,@Value
类型:类注解。属性注解
位置:类上方。属性上方
作用:@PropertySource:加载资源文件夹。@Value:给属性赋值(非引用数据类型)
实例:
@PropertySource(value="classpath:jdbc.properties")
public class JDBCConfig {
@Value("${driverClassName}")
private String driver;
@Value("${url}")
private String url;
@Value("${user}")
private String username;
@Value("${password}")
private String password;
}
说明:不支持*通配符。
2.7 引用数据类型注入
名称:@Autowired。
类型:属性注解
位置:定义属性上方
作用:设置该属性注入的对象
实例:
@Autowired
@Qualifier("empdao")
private EmpDao empDao;
说明:单独的使用@Autowired默认按照类型(byType)进行装配(注入)。指定@Qualifier后可以指定自动装配的bean的id(byName)
2.8 引用数据类型注入2
名称:@Primary
类型:类注解
位置:类定义上方
作用:设置该类对应的bean按照类型装配的时候优先装配
实例:
@Primary
public class ClassName{
}
说明:@Autowired默认根据类型装配,当出现多个同类型的bean,使用@Primary的类会有限装配。如果同类型的bean出现多个@Primary那么优先级设置无效
2.9 纯注解格式
名称:@Configuration。@ComponentScan。@Import
类型:类注解
位置:类定义上方
作用:设置当前类为Spring的核心配置类
实例:
@Configuration
@ComponentScan("com.lxk")
@Import({JDBCConfig.class,MybatisConfig.class})
public class SpringConfig {
}
说明:
核心配置类用于替换Spirng的核心配置文件。此配置类可以为空,不设置变量和属性。
bean的扫描工作交给了@ComponentScan代替
@Import注解在同一个类上,仅允许出现一次。如果需要导入多个使用数据的形式设定
@Bean所在的类如果使用导入的形式进去到Spring容器照片中。无需声明bean。
3.Spring和mybatis整合
3.1 创建项目和结构
3.2 引入依赖
3.3 编写数据库连接配置类
public class JDBCConfig {
@Value("${driverClassName}")
private String driver;
@Value("${url}")
private String url;
@Value("${user}")
private String username;
@Value("${password}")
private String password;
@Bean("datasource")
public DruidDataSource getDruidDataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setDriverClassName(driver);
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
return datasource;
}
}
3.4 编写mybaits配置类
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource datasource) {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(datasource);
sqlSessionFactoryBean.setTypeAliasesPackage("com.lxk.bean");
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.lxk.mapper");
return mapperScannerConfigurer;
}
}
3.5 编写Spring配置类
@Configuration
@ComponentScan("com.lxk")
@PropertySource(value="classpath:jdbc.properties")
@Import({JDBCConfig.class,MybatisConfig.class})
public class SpringConfig {
}
3.6 完成各层的注解
看视频资料
3.7测试
public class SpringMybatisTest {
public static void main(String[] args) {
//ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
EmpService empService= (EmpService)applicationContext.getBean("empServiceImpl");
List<Emp> list = empService.findAll();
for (Emp emp : list) {
System.out.println(emp.getEid()+","+emp.getEname()+","+emp.getSex()+","+emp.getAge());
}
}
}