spring注解开发
文章目录
1 注解开发定义bean
提前创建好了一个项目
1.1 简化配置文件
- 不想每次都配置文件,就在是实现类上添加注解 @Component(“bookDao”) 后面是id
package com.demo.dao.impl;
import com.demo.dao.BookDao;
import org.springframework.stereotype.Component;
@Component("bookDao")
public class BookDaoImpl implements BookDao {
@Override
public void test() {
System.out.println("BookDao is running...");
}
}
- 配置文件中不在配置bean,而是指定扫描哪一个位置的文件
<!-- <bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>-->
<context:component-scan base-package="com.demo.dao.impl"/>
2 纯注解开发模式
写一个类代替配置文件,并且为其加上配置的注解Configuration
添加扫描包的注解,以及包的路径
使用新的启动类
package com.demo;
import com.demo.configer.SpringConfig;
import com.demo.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App2 {
public static void main(String[] args) {
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
bookDao.test();
}
}
3 bean的管理
3.1 bean的作用范围
只需要添加一个注解改变是否为单例
3.2 生命周期
只要添加对应的注解区分初始化函数 @PostConstruct 与销毁函数 @PreDestroy
4 依赖注入
自动装配
引用类型
使用注解@Autowired 自动装配对象
@Autowired
private BookDao bookDao;
这样以后可以不再使用set方法了
注意
如果有多个对象,就不能使用类型装配,得使用名称装配
简单类型
使用@Value注解
外部文件加载进来
首先创建好一个jdbc.properties
然后使用注解引入外部文件
使用的时候,用 $ 加{}的形式,引用
5 管理第三方bean
- 定义一个方法获得要管理的对象
package com.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
// 1.定义一个方法获得要管理的对象
public DataSource dataSource(){
DruidDataSource ds=new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
}
- 添加@Bean ,表示当前方法的返回值是一个bean
package com.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
// 1.定义一个方法获得要管理的对象
@Bean
public DataSource dataSource(){
DruidDataSource ds=new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
}
- 设置启动项,查看是否获得相应的信息。使用类型引用的方法
package com.demo;
import com.demo.config.SpringConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource dataSource = applicationContext.getBean(DataSource.class);
System.out.println(dataSource);
}
}
将这个类放到专门的jdbc类里面
方法一
新建一个类
给其添加上配置的注解
package com.demo.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class jdbcConfig { @Bean public DataSource dataSource(){ DruidDataSource ds=new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/spring_db"); ds.setUsername("root"); ds.setPassword("123456"); return ds; } }
在配置类里加上扫描jdbc类的注解
package com.demo.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.demo.config") public class SpringConfig { }
方法二
新建一个类
package com.demo.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; public class jdbcConfig { @Bean public DataSource dataSource(){ DruidDataSource ds=new DruidDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/spring_db"); ds.setUsername("root"); ds.setPassword("123456"); return ds; } }
在配置类里导入这个新建的类
package com.demo.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(jdbcConfig.class) public class SpringConfig { }