学习笔记系列开头惯例发布一些寻亲消息
链接:https://baobeihuijia.com/bbhj/contents/3/192486.html
SSM框架——注解配置(@Component + @Autowired + 加载SpringConfig)
-
注解开发(Component注解、config扫描 + 加载SpringConfig)
@Component("bookDao") 可以按照名字或者类型找 BookDao bookDao = ctx.getBean("bookDao"); BookDao bookDao = ctx.getBean(BookDao.class); @Component 只可以按照类型找到 BookService bookService = ctx.getBean(BookService.class); # 扫描该包以及该包下所有子包的注解 <context:component-scan base-package="com.ithema"/>
-
三级注解
- @Service
- @Repository
- @Controller
-
用Config来替换applicationContext.xml容器
//声明当前类为Spring配置类 @Configuration //设置bean扫描路径,多个路径书写为字符串数组格式 @ComponentScan({"com.itheima.service","com.itheima.dao"}) public class SpringConfig { }
-
AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
-
public class AppForAnnotation { public static void main(String[] args) { //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); BookDao bookDao = (BookDao) ctx.getBean("bookDao"); System.out.println(bookDao); //按类型获取bean BookService bookService = ctx.getBean(BookService.class); System.out.println(bookService); } }
-
控生命周期
-
// 单例 @Scope("prototype") // 控制生命周期 @PostConstruct 构造方法后 public void init(){ } @PreDestory 彻底销毁前 public void destory(){ }
-
-
依赖注入,自动装配:可以不写setter
// 按照类型装配 @Repository @Autowired //按照名字装配 @Repository("bookDao2") @Autowired @Qualifier("bookDao2") // 简单类型注入,其中value的值可以由properits提供 @Value("给一个值就行666") @Value("${name}") private String name;
@Configuration @ComponentScan("com.itheima") //@PropertySource加载properties配置文件,不支持通配符 @PropertySource({"jdbc.properties"}) public class SpringConfig { }
-
第三方管理(手写new代码)
添加@Bean,表示当前方法的返回值是一个bean //@Bean修饰的方法,形参根据类型自动装配 @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; }
一般将上述内容单独写一个JdbcConfig 然后让spring config @Import("JdbcConfig");
- 第三方管理的依赖注入,以形参自动装配
// 简单类型 @Value("com.mysql.jdbc.Driver") private String driver; // 引用类型 @Bean public DataSource dataSource(BookDao bookDao){ System.out.println(bookDao); DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; }
-
XML配置和注解配置的区别
方面 XML配置 Spring Config注解配置 Bean生成
后直接到Spring容器中@Component/三种延申
需要@ComponentScan后才进入容器依赖注入 setter注入 <property name=““ ref=”" />
构造器注入@Autowired
@Qualifer
@Value第三方 当作bean对象,然后赋值proporeties属性 单独一个config文件
@Bean 后new需要的第三方对象
Spring config中需要import这个类声明周期 <bean id=“bookDao” class=“com.itheima.dao.impl.BookDaoImpl” init-method=“init”,destory-mewthod=“destory”/> @PostConstruct 构造方法后
@PreDestory 彻底销毁前属性文件 <context:property-placeholder location=“classpath*.properties” system-properties-mode=“NEVER”/> @PropertSource(”xxxxx) 使用容器 ClassPathXmlApplicationContext ctx = new ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);