bean的创建方式
1、构造方法创建(类中需有对应的构造方法)
<bean id="constructInjection" class="com.huawei.bean.ConstructInjection"
scope="prototype" init-method="init" destroy-method="destory">
<constructor-arg type="java.lang.String" value="likui"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg index="2" ref="now"></constructor-arg>
</bean>
2、set方法创建(类中需有对应的属性,并提供set方法)
<bean id="setterInjection" class="com.huawei.bean.SetterInjection">
<property name="name" value="likui"></property>
</bean>
3、注解创建
@Component
@Controller
@Service
@Repository
bean的作用域
scope属性
- singleton
- prototype
- request
- session
- global session
其中global session的配置为针对集群的配置。设置session对所有服务器都有效。
bean的生命周期
- singleton
单例bean随着spring容器的创建而创建,容器销毁时销毁。
创建时执行init方法,销毁时执行destory方法。
- prototype
多例bean在使用时创建,由jvm进行回收。
创建时执行init方法,销毁时不会执行destory方法。
bean相关注解
- @Component
有value属性,可指定创建的实例名称,如不指定,默认为类名首字母小写。
还有三个衍生注解:
@Controller
@Service
@Repository
- @Autowired
自动按照类型注入
- @Qualifier
可与@Autowired搭配使用用于指定按照每一个名称注入,如
@Autowired
@Qualifier("userDaoImpl)
- @Resource(name = “userDaoImpl”)
相当于
@Autowired
@Qualifier(“userDaoImpl)
**- @PostConstruct
用于指定init方法,相当于xml中的init-method=”"
- @PreDestroy
用于指定销毁方法,相当于xml中的destroy-method=""
- @Value
用于基本数据类型和String的注入,并支持el表达式,如:@Value(${com.huawei.name})
spring的新注解
-
@Configuration
用于类上,指定该类是一个配置类,作用相当于bean.xml配置文件,和 @Bean配合使用。 -
@ComponentScan
用于指定spring容器要扫描的包,相当于xml配置文件中的<context:component-scan base-package="com.huawei"/>
-
@Bean
用于方法上,创建的实例如果没有指定名称,则为方法名。
例如:@Configuration @ComponentScan(basePackages = "com.huawei") public class SpringConfiguration { @Bean public Connection getConnection(){ return null; } }
-
@Import
用于引入其他配置类。
如:@Configuration @ComponentScan(basePackages = "com.huawei") @Import(JdbcConfiguration.class) public class SpringConfiguration { @Bean public Connection getConnection(){ return null; } }
指定JdbcConfiguration为配置类,同时JdncConfiguration上不用写 @Configuration注解。
-
@PropertySource
用于指定属性文件位置,如:@Configuration @ComponentScan(basePackages = "com.huawei") @Import(JdbcConfiguration.class) @PropertySource("classpath:jdbc.properties") public class SpringConfiguration { @Bean public Connection getConnection(){ return null; } }