IoC详解
1. Spring的一些衍生注解
注解 | 描述 |
---|---|
@Component | 将修饰的资源交给Spring管理.value属性:为资源命名(唯一标识) |
@Controller | 衍生注解,与@Component作用和属性相同,特用于修饰标识层的资源. |
@Service | 衍生注解,与@Component作用和属性相同,特用于修饰业务逻辑层的资源 |
@Repository | 衍生注解,与@Component作用和属性相同,特用于修饰数据访问层的资源 |
- 这四个注解修饰的类,我们通常称为注册bean.目的是将某类的实例对象,添加到spring容器中
1.2 依赖注入(DI)
注解 | 描述 | 修饰位置 |
---|---|---|
@Resource(name="") | 按照指定名称注入对象 | 字段\setter方法 |
@Resource | 按照类型注入对象 | 字段\setter方法 |
@Value | 注入简单值 | 字段、setter方法、参数 |
@PropertySource | 加载properties配置文件 | 类 |
1.2.1 按照名称注入
-
dao
@Repository("dao1") public class UserDao { }
-
service
@Service("service1")
public class UserService{
//name对应UserDao
@Resource(name="dao1")
private UserDao userDao;
}
1.2.2 按照类型注入
-
dao
@Repository public class UserDao { }
-
service
@Service("service1") public class UserService{ //对应UserDao @Resource() private UserDao userDao; }
1.2.3 普通数据注入
-
固定值注入
public class SpringConfigruation { @Value("com.mysql.jdbc.Driver") private String driver; @Value("jdbc:mysql://127.0.0.1:3306/crm_ssm_v1_0") public void setUrl(String url){ System.out.println("字段:" + driver); System.out.println("方法:" + url); } }
测试:(使用的是JUnit测试)
扫描二维码关注公众号,回复: 4484864 查看本文章@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={SpringConfigruation.class}) public class UserDaoTest { @Test public void testFindAll() throws SQLException{ } }
1.2.4 properties数据注入
-
配置类
使用@PropertySource
加载properties配置文件"
classpath
"是固定前缀,表示从类路径下加载配置文件.@Value(${jdbc.driver})
获得配置文件中指定key的内容默认:将整个表达式进行注入,及 driver变量的值是
${jdbc.driver}
固定代码:必须配置
PropertySourcesPlaceholderConfigurer
实例。- jdbc.properties配置文件(这是连接数据库所需配置)
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test1 jdbc.username=root jdbc.password=root
- 配置类
@PropertySource(value={"classpath:jdbc.properties"}) Public class SpringConfigruation2{ @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholder(){ return new PropertySourcesPlaceholderConfigurer(); } }
-
service类进行测试
@Service("service1")
public class UserService{
//对应UserDao
@Resource()
private UserDao userDao;
@Value("${jdbc.username}")
private String username;
public void save() {
System.out.println("配置类用户名"+username);
}
}
2. @Bean(工厂Bean)
通过@Component
等注解,将我们自己编写的对象配置到spring容器中。
通过@Resource
等注解,将我们自己编写的对象之间的关系配置到spring容器中。
实际开发中,我们常需要整合第三方对象(组件)。在spring
中提供@Bean
来实现。
2.1 基本使用:类型注入
- 配置类
public class SpringConfigruation3 {
//@Bean用于修饰方法,将方法创建的对象添加到spring容器
@Bean
public UserDao userDao(){
return new UserDao();
}
}
- 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SpringConfigruation3.class})
public class UserDaoTest {
@Autowired
private UserDao userDao;
@Test
public void testFindAll() throws SQLException{
System.out.println(userDao);
}
}
3.Bean的作用域
注解 | 描述 | 取值 |
---|---|---|
@Scope | 用于设置Bean的作用域,也就是通知spring是否每次都创建新对象 | singleton:默认值,单例 prototype:多例 |
- 其他取值(了解)
-
request:在WEB项目中.Spring创建一个Bean对象将对象存入到request域中
-
session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中
-
globalSession :WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session
3.1 实例Bean
实例Bean有两个注解,来控制类中哪个方法是初始化方法,哪个方法是销毁方法
注解 | 描述 |
---|---|
@PostConstruct | 初始化方法,项目启动时执行,只会被调用一次 |
@PreDestroy | 销毁方法,项目关闭时执行,只会被调用一次 |
3.2工厂Bean
工厂Bean通过@Bean的两个属性完成初始化和销毁的配置
initMethod:配置初始化方法
destroyMethod:配置销毁方法
例如:
@Bean(initMethod="",destroyMethod="")