Spring学习——Spring IOC注解



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());
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值