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

转载于:https://www.cnblogs.com/ldh-better/p/6647038.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值