文章源自JAVA秀-https://www.javaxiu.com/19874.html
回顾:通过前面的章节的了解,我们又了解了FactoryBean接口的使用,当我们想自己手动创建一个bean并且自己初始化这个bean的一些属性的时候,我们可以使用FactoryBean来实现。通过前面的章节学习,我们基本上知道了bean的几种实例化(也就是创建方式):第一种是xml配置spring创建方式,第二种是@Service、@Controller、@Conponent等注解后spring创建的方式,第三种就是通过FactoryBean接口方式,通过开发者自己创建一个bean对象。了解完成了bean的实例化方式,本章节我们了解一下bean的几种初始化的方式。注意:实例化是创建bean,而初始化是初始化bean,两者不要搞混了,本章节我们将了解两种初始化bean的方式。 文章源自JAVA秀-https://www.javaxiu.com/19874.html
文章源自JAVA秀-https://www.javaxiu.com/19874.html
1. init-method属性和InitializingBean接口的基本介绍
一、init-method属性:用于指定一个类的一个方法,spring在创建该类的bean之后,会马上调用该方法用于初始该bean对象。文章源自JAVA秀-https://www.javaxiu.com/19874.html
二、InitializingBean接口:作用同上,一个类实现该接口后,spring在创建该类的bean之后,会马上调用afterPropertiesSet方法,开发者可以在该方法内写代码初始化该bean对象。文章源自JAVA秀-https://www.javaxiu.com/19874.html
2. init-method属性基本使用
第一步:创建一个User类如下:文章源自JAVA秀-https://www.javaxiu.com/19874.html
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class User implements Serializable {
private static final long serialVersionUID = 4800166777883697833L;
private Long id;
private String name;
private String identity;
private String mobile;
private String bankcard;
private Integer age;
private Integer gender;
}
第二步:创建一个接口和接口实现类如下:文章源自JAVA秀-https://www.javaxiu.com/19874.html
public interface UserService {
User findUserById(Long id);
}
public class UserServiceImpl implements UserService {
public String version;
public String serviceName;
public void initUserService() {
version = "V1.0.0";
serviceName = "用户服务";
}
@Override
public User findUserById(Long id) {
User user = new User();
user.setId(id);
user.setName("张山");
user.setIdentity("张山");
user.setBankcard("36457736355363");
user.setMobile("16752652625");
user.setGender(2);
user.setAge(18);
System.out.println("version: " + version);
System.out.println("serviceName: " + serviceName);
return user;
}
}
第三步:配置applicationContext.xml文件内容:文章源自JAVA秀-https://www.javaxiu.com/19874.html
<bean id="userService" name="userService" class="com.minesoft.tutorial.service.UserServiceImpl"
scope="singleton"
autowire="byType"
abstract="false"
lazy-init="true"
init-method="initUserService"
/>
第四步:最后我们运行下面的代码文章源自JAVA秀-https://www.javaxiu.com/19874.html
ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserService userService = cac.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
我们能看到控制台会输出“version: V1.0.0,serviceName: 用户服务”字符串,说明我们的initUserService被spring调用了,然后成功的初始化了UserServiceImpl这个bean。文章源自JAVA秀-https://www.javaxiu.com/19874.html
3. InitializingBean接口的基本使用
第一步:创建一个User类如下:文章源自JAVA秀-https://www.javaxiu.com/19874.html
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class User implements Serializable {
private static final long serialVersionUID = 4800166777883697833L;
private Long id;
private String name;
private String identity;
private String mobile;
private String bankcard;
private Integer age;
private Integer gender;
}
第二步:创建一个接口和接口实现类如下:文章源自JAVA秀-https://www.javaxiu.com/19874.html
public interface UserService {
User findUserById(Long id);
}
@Service
public class UserServiceImpl implements UserService, InitializingBean {
private Map<Integer, String> blackListMap = new HashMap<>();
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Execute afterPropertiesSet method.");
//初始化一个id与姓名的map用于后面的业务处理
blackListMap.put(10001, "李云");
blackListMap.put(10002, "韩宇");
blackListMap.put(10003, "刘武");
}
@Override
public User findUserById(Long id) {
User user = new User();
user.setId(id);
user.setName("张山");
user.setIdentity("张山");
user.setBankcard("36457736355363");
user.setMobile("16752652625");
user.setGender(2);
user.setAge(18);
return user;
}
}
第三步:配置applicationContext.xml文件内容:文章源自JAVA秀-https://www.javaxiu.com/19874.html
<context:component-scan base-package="com.minesoft.tutorial" />
第四步:最后我们运行下面的代码文章源自JAVA秀-https://www.javaxiu.com/19874.html
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService userService = beanFactory.getBean(UserService.class);
User user = userService.findUserById(100L);
System.out.println(JSONObject.toJSONString(user));
运行完上面的代码,我们会发现在执行System.out.println(JSONObject.toJSONString(user));代码前,控制台有输出如下的语句“Execute afterPropertiesSet method.”,说明afterPropertiesSet这个方法在我们创建bean的时候会被调用,用于完成我们的bean的个性出初始化的处理。另外完成这个方法的执行后我们的UserServiceImpl类的bean持有了一个Map对象,可以用于我们后续的业务处理。文章源自JAVA秀-https://www.javaxiu.com/19874.html
总结:无论是init-method属性还是InitializingBean接口,都是spring框架给开发者一个灵活初始化自己的业务bean的扩展机制。这个两种初始化bean的使用方式比较简单,再次就不多做赘述。文章源自JAVA秀-https://www.javaxiu.com/19874.html
文章源自JAVA秀-https://www.javaxiu.com/19874.html
更多知识请关注公众号文章源自JAVA秀-https://www.javaxiu.com/19874.html

评论