Spring加载类
- spring启动时资源的加载顺序:静态方法->类的属性–>无参构造–>注入@Autowired修饰的依赖–>执行@postConstruct修饰的init()方法。
在静态方法中调用@Autowired注入的实例对象
- 了解完spring加载资源的顺序后,可知如下编码是不能顺利使用的,虽然能编译过,但在执行的时候会报空指针异常
@Component
public class Application {
@Autowired
private static BookDao bookDao;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
for (int i = 10; i < 20; i++) {
Book book = new Book();
book.setName("java编程思想" + i);
book.setNumber(i);
book.setDetail("java书籍" + i);
bookDao.addBook(book);
}
}
}
方法一:使用set方法
@Component
public class Application {
// 方式1: 使用set方法
private static BookDao bookDao;
@Autowired
public void setBookDao(BookDao bookDao) {
Application.bookDao = bookDao;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
for (int i = 10; i < 20; i++) {
Book book = new Book();
book.setName("java编程思想" + i);
book.setNumber(i);
book.setDetail("java书籍" + i);
bookDao.addBook(book);
}
}
}
方法二:使用构造方法
@Component
public class Application {
//方式2:使用构造方法
private static BookDao bookDao;
@Autowired
public Application(BookDao bookDao) {
Application.bookDao = bookDao;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
for (int i = 10; i < 100; i++) {
Book book = new Book();
book.setName("java编程思想" + i);
book.setNumber(i);
book.setDetail("java书籍" + i);
bookDao.addBook(book);
}
}
}
方法三:使用@PostConstruct注解
注解详情请见:@PostConstruct
@Component
public class Application {
//方式3:使用@PostConståruct注解(意义不是很大,主要了解下@PostConstruct注解)
private static BookDao bookDao;
@Autowired
private BookDao bookDao1;
@PostConstruct //该注解在构造方法之后会被执行
private void beforeInit() {
this.bookDao = bookDao1;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
for (int i = 10; i < 100; i++) {
Book book = new Book();
book.setName("java编程思想" + i);
book.setNumber(i);
book.setDetail("java书籍" + i);
bookDao.addBook(book);
}
}
}