spring bean学习笔记

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);
        }
        
    }
}
View Code

 

 

测试类:

//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); }

 

转载于:https://www.cnblogs.com/linyaoguo/p/11547166.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值