注解开发
使用component定义bean
@Component("bookDao")
@Component相当于 定义一个bean
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
核心配置文件通过主键扫描加载bean
<context:component-scan base-package="com.itheima"/>
Sping提供@component注解的三个衍生注解
@Controller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义纯注解开发
java类替代Spring核心配置文件
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig(){
}
@Configuration 相当于整个xml结构
@ComponentScan("com.itheima") 代替了
<context:component-scan base-package="com.itheima"/>
加载配置类初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SPringConfig.class)
AnnotationConfigApplicationContext acc = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bean = acc.getBean(BookDao.class);
System.out.println(bean);
atx.getBean();
注意: 记载配置文件用的是
ClassPathXmlApplicationContext ac = newClassPathXmlApplicationContext();
别搞错了
@Scope("singleton") 单列设计模式 prototype:非单列 一般情况下为默认单列模式
@Scope("prototype")
public class BookDaoImpl implements BookDao {}
AnnotationConfigApplicationContext acc = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bean = acc.getBean(BookDao.class);
BookDao bean2 = acc.getBean(BookDao.class);
System.out.println(bean);
System.out.println(bean2);
acc.close();
输出:
初始化
com.itheima.dao.impl.BookDaoImpl@c540f5a
com.itheima.dao.impl.BookDaoImpl@770c2e6b
销毁前
这就是非单列模式
@PostConstruct 初始化 写在方法体上面代表本方法体为初始化方法
@PostConstruct
public void init(){
System.out.println("初始化");
}
@PreDestroy 销毁前执行的 写在方法体上面代表本方法体为销毁前执行
@PreDestroy
public void Destroy(){
System.out.println("销毁前");
}