javabean的的三种创建、装配
1、创建一个类实现FactoryBean接口
public class RunnableFactroyBean implments FactoryBean<Jeep>{
public Jeep getObject() throws Exception{
return Jeep();
}
public class<?> getObjectType(){
return Jeep.class;
}
public boolean isSingleton(){
return true;
}
}
使用配置类进行RunnableFactroyBean装配
2、直接创建一个Jeep类
package com.lsq.spring;
public class Jeep {
public Jeep() {
}
}
使用配置类进行装配(也可在配置类中进行依赖注入)
@Configuration
public class MyConfig {
@Bean
@scope(”prototype”)//默认单例,此为不单例
public Jeep createJeep() {
return new Jeep();
}
}
3、创建一个Jeep类,使用注解来装配
@compnent(“myJeep”)//指定名字
@repository
@service
@controller
@autowired 依赖注入
@resource JSR 250注解
@Inject Javax inject JSR330
public class Jeep {
}
调用方法
1、通过类型获取
System.out.println(context.getBean(Jeep.class));
context.getBeansOfType(User.class);//获取到的是一个map
2、通过名字调用 两种方式 1⃣️默认为方法名 2⃣️配置时指定@Bean(name="createJeep")3⃣️注解版的名字获取(类名首字母小写)
System.out.println(context.getBean(“createJeep”));
三种前置、后置通知的方式
1、创建类实现 initializingbean内置init和destroy方法
public class cat implements InitializingBean,DisPOSableBean{
public void afterPropertiesSet () throws Exception{
syso("前置通知");
}
public void destroy () throws Exception{
syso("后置通知");
}
}
2、创建类,自定义init和destroy方法 (建议使用方法,依赖性最好)
装配制定init和destroy方法
@Bean(initMethod=“init”,destroy=“destroy”)
3、创建bean 并创建init和destroy方法
@PostConstruct 前置
@PreDestroy后置
依赖注入时,装配优先级 @primary
或者使用时 @qualifier("方法名")
①annotationConfigApplicationContext(类名.class)
②annotationConfigApplicationContext("包名")
③componentScan(basepackages="包名",excludeFilters=@Filter(type=FilterType.ASSIGNABLE_TYPE,classes=配置类.class))
④componentScan(basepackages="包名",excludeFilters=@Filter(type=FilterType.ASSIGNABLE_TYPE,classes={配置类.class,UserController.class}))