@Resource和@Component實現零XML配置
1、@Resource的注解:
@Resource是J2EE的注解。意思是說在容器里面找相應的資源。也可以通過name屬性指定它name的資源。可以注解到field或者setter上面
~~~
public class UserAction {
private UserService userService;
@Resource(name="userService")
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
userService.HelloWorld();
}
}
~~~
2、@Component
@Component和<context:component-scan base-package="com.spring"></context:component-scan>配合實現無XML配置,只通過注解配置及可將類放入資源容器中。
案例解析:
1、 xml文件:配置容器資源掃描的包
~~~
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<!-- 配置容器資源掃描的包 -->
<context:component-scan base-package="com.spring"></context:component-scan>
</beans>
~~~
2、 Java文件:
標注資源的注解@Component。括號里面指定的是存入容器的name屬性為userService
那么將來我們拿的時候則getBean(“userService”)即可。如果我們不指定userService它默認存入容器bean的key為userServiceImpl這樣就可以得到一個裝有UserServiceImpl對象的容器
~~~
package com.spring.service;
import org.springframework.stereotype.Component;
import com.spring.dao.UserDao;
@Component("userService")
public class UserServiceImpl implements UserService{
private UserDao userDao;
public void init(){
System.out.println("init");
}
public void destory(){
System.out.println("destory");
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void HelloWorld(){
System.out.println("helloworld");
}
}
~~~
通過@Resource將資源注入進來
因為上文已經配置了容器里面的資源。所以我這里將資源通過@Resource注解將資源注入到相關的屬性。請看代碼:
~~~
@Component("userAction")
public class UserAction {
private UserService userService;
//它會將beans的xml文件配置加入進去
//也可以使用name屬性指定byName的指定
@Resource(name="userService")
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
userService.HelloWorld();
}
}
~~~
測試實現:
通過上文配置的userAction案例來得到這個對象然后調用它里面的方法,因為上文通過了@ Component注解將UserAction的對象配置到了容器里面。所以獲得容器之后就可以用這種方法getbean即可
~~~
@Test
public void test01(){
BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml");
UserAction user = (UserAction) applicationContext.getBean("userAction");
user.addUser();
}
@Scope和@PostConstruct、@PreDestroy
~~~
很簡單就相當于前面講到的作用于和initmethod和destorymethod請看下面代碼。不再多說:
~~~
@Scope("Singleton")
@Component("userService")
public class UserServiceImpl implements UserService{
private UserDao userDao;
@PostConstruct
public void init(){
System.out.println("init");
}
@PreDestroy
public void destory(){
System.out.println("destory");
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void HelloWorld(){
System.out.println("helloworld");
}
}
~~~
- 前言
- 一、Ioc控制反轉注入原理
- 二、Ioc控制反轉集合注入和Scope
- 三、Bean的懶加載和生命周期
- 四、基于Annotation的bean
- 五、Spring容器組建注解@Component和Resouces實現完全注解配置
- 六、Spring自動裝配注解@Autowired
- 七、Spring Aop的理解和簡單實現
- 八、Spring Aop織入點語法和相關案例總結
- 九、Spring Aop 用xml的方式實現
- 十、Spring DBCP用xml和properties2種格式配置DataSource
- 十一、Spring整合Hibernte
- 十二、Spring中Annotation聲明事務
- 十三、Spring中Xml聲明事務
- 十四、Spring中hibernateTemplate的使用