Spring中獲取對象


 Spring是一個非常主流,而且是好用的框架。提供管理對象的容器,提供事務的支持,緩存,權限認證(往往不用)。用來集成hibernate等。而管理對象的生命周期是其中一個非常重要的功能。在Spring中通過IOC可以輕松實現解耦,而開發人員則可以更專心於業務邏輯的編寫。

第一種情況:管理Dao,Service,Manage等bean

配置的方式:(開發中一般以第二種居多)

  1:通過xml  

<bean id="messageHelper" class="com.dtsz.framework.core.spring.MessageHelper"/>

  2:通過注解和掃描

     2.1  指定掃描的范圍:

 <!-- 使用annotation 自動注冊bean, 並保證@Required、@Autowired的屬性被注入 -->
    <context:component-scan
            base-package="com.dtsz">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 

這句話的意思就是,我掃描com.dtsz的包下bean。交給spring容器管理 

  2.2 通過注解標識bean

@Service
@Transactional
public class UserManager extends BaseService{
    @Resource
    UserDao userDao;

    private static Logger logger = LoggerFactory
            .getLogger(UserManager.class);
    
        ........
}

 

在於將組件交給Spring容器管理。組件的名稱默認是類名(首字母變小寫),也可以自己修改:
@Component:當對組件的層次難以定位的時候使用這個注解
@Controller:表示控制層的組件
@Service:表示業務邏輯層的組件
@Repository:表示數據訪問層的組件

使用的方式:

  1:通過@Autowired  或者@Resource

@Controller
@RequestMapping("/personInfoController")
public class UserController {

    private static Logger logger = LoggerFactory
            .getLogger(UserController.class);
    @Resource
    UserManager userManager;
        
        .....
}    

 

通過 這種方式,可以將@autowird寫到 set方法,也可以直接寫到對象聲明上。

代碼如下: 

1 private JdbcTemplate jdbcTemplate
2     
3 
4   @Resource
5     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
6         this.jdbcTemplate = jdbcTemplate;
7     }
8 
9 ......

 

2: 通過構造器注入

1 <bean name="springAction" class="com.dtsz.action.SpringAction">  
2         <constructor-arg index="0" ref="userDao"></constructor-arg>  
3         <constructor-arg index="1" ref="userService"></constructor-arg>  
4     </bean> 

 

java代碼中使用

 1 public class SpringAction {  
 2     //注入對象springDao  
 3     private UserDao userDao;  
 4     private UserService userService;  
 5       
 6     public SpringAction(UserDao userDao,UserService userService){  
 7         this.userDao = userDao;  
 8         this.userService = userService;   
 9     }  
10  
11 } 

 

第二種情況 :在ApplicationContext環境外獲取bean(比如webService,junit測試類)

1:繼承 ServletContextListener

 1 public class SpringContextListener implements ServletContextListener {
 2     private static Logger logger = LoggerFactory
 3             .getLogger(SpringContextListener.class);
 4     private static ApplicationContext springContext;
 5 
 6     public void contextDestroyed(ServletContextEvent event) {
 7         // 暫時不寫;
 8     }
 9 
10     public void contextInitialized(ServletContextEvent event) {
11         System.out.println("####################初始化容器開始");
12         springContext = WebApplicationContextUtils
13                 .getWebApplicationContext(event.getServletContext());
14         if (springContext == null) {
15             logger.warn("cannot find applicationContext");
16             return;
17         }
18 
19         System.out.println("####################初始化容器結束");
20     }
21 
22     public static ApplicationContext getApplicationContext() {
23         return springContext;
24     }
25 
26     public static void setApplicationContext(ApplicationContext cxt) {
27         springContext = cxt;
28     }
29 
30 }

 

2:  applicationContentAware


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM