bean的配置:在resources目录下的依赖
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="" class=""></bean>
</beans>
bean的作用范围:
bean标签使用scope属性:
singleton:单例的
prototype:多例的
request:web应用请求范围
session:web应用会话范围
global-session:适用于集群环境的会话范围
---------------------------------------------------------------------------------
核心容器的两个接口:
ApplicationContext:采用立即加载的方式,在读取完配置文件就马上创建配置文件中的配置对象,适用于单例对象
BeanFactory:采用的是延迟加载的方式,获取id对象时才创建真正的配置对象,适用于多例对象
---------------------------------------------------------------------------------
构造函数注入:
使用constructor-arg标签
<bean> <constructor-arg ></constructor-arg> </bean>
标签中的属性:
type:用于指定要注入的数据类型
index:用于指定构造函数中需要注入的索引
name:用于指定构造函数中需要注入的名称
value:用于提供基本类型和String类型
ref:指定容器其他bean类型数据
------------------------------------------------------------
set方法注入:
使用property标签
标签中的属性:
name:用于选择set方法的名称
value:用于提供基本类型和String类型
ref:指定容器其他bean类型数据
-------------------------------------------------------------
IOC注解
<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">
用于创建对象:
@Component(value=""),把当前对象存入spring容器中,value指定bean的id。需要在bean中配置
<context:component-scan base-package="com.lin"></context:component-scan>
以下三个也是属于创建对象,功能属性和Component一样
Controller:一般用于表现层
Service:一般用于业务层
Repository:一般用于持久层
用于注入数据:
@Autowired,自动按照类型注入,如果IOC容器存在一个唯一的bean对象类型和注入类型匹配,则注入成功。
如果IOC容器中没有任何对象类型和注入类型匹配,则报错。
如果IOC容器中有多个对象类型匹配,再看key中是否与注入类型的名称匹配,如果匹配则注入成功,否则报错。
出现的位置:可以是变量上,也可以是方法上。set方法不是必须的了
@Qualifier,在按类型注入的基础之上再按名称注入,要和Autowrite搭配使用。但是给方法参数注入时可以单独使用。
属性:value:用于指定注入bean的id。
@Resource,直接按照bean的id注入,可以单独使用。
属性:name:用于指定注入bean的id。
以上三种只能注入其他bean类型,不能注入String类型和基本类型的数据。
@Value,用于注入String类型和基本类型。
属性:value:用于指定数据的值(也可以使用Spring的el表达式 ${表达式})
用于改变作用范围:
@Scope,指定bean的作用范围
属性:value:指定范围 (singleton prototype)
生命周期相关:
@preDestroy,用于指定销毁方法
@postConstruct,用于指定初始化方法
新注解:
@Configuration,指定当前类是一个配置类
@ComponentScan,用于通过注解指定spring在创建容器时要扫描的包
属性:value:和basePackages作用一样,用于指定创建容器时要扫描的包
@Bean,用于把当前方法的返回值作为bean对象存入spring的ioc容器中。
属性:name:用于指定bean的id,不写时默认值为当前方法名。
@Import,用于导入其他配置类,有Import类的是父配置类,导入的是子配置类。
属性:value:用于指定其他配置类的字节码。
@PropertySource,用于指定properties文件的路径。
属性:value:指定文件名称和路径。关键字:classpath,表示类路径下
@Configuration @ComponentScan("com.it") public class SpringConfiguration { @Bean("runner") public QueryRunner createQueryRunner(DataSource dataSource ) { return new QueryRunner(dataSource); } @Bean("dataSource") public DataSource createDataSource() { try { ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/test"); ds.setUser("root"); ds.setPassword("lin000"); return ds; }catch(Exception e){ throw new RuntimeException(e); } } }
测试类:
//1.获取容器
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//使用注解实现
//ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
//2.得到业务层对象 AccountService ad = ac.getBean("accountService",AccountService.class);
//3.执行方法 List<Account> accounts = ad.findAll(); for(Account account:accounts) { System.out.println(account); }