springIoc注解开发

jar包

使用ioc注解开发时除了几个基本的jar包还需要使用aop的包(Spring4时才需要aop包):

* beans包
* context包
* core包
* epression包
* aop包

配置文件

我们在使用xml配置文件开发时引入的是beans约束,但是如果是使用注解开发需要引入context约束。

如何查找context约束

spring-framework-4.3.9.RELEASE\docs\spring-framework-reference\html中可以找到context schema

<?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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
</beans>

对于其余的约束也是一样的,都是在这个文件中去查找。

组件扫描

虽然是使用注解开发但是在xml配置文件中需要开启组件扫描。

<context:component-scan base-package="包路径" />

注意:开启该组件的作用是扫描类,也就是如果需要在类上面使用注解就必须要开启该扫描(开启了该扫描对于不是类上面的注解当然也是可以使用的)

在类上面添加注解

@Component(value=“名称”)注解
@Component("userDao") //value是可以省略的
public class UserDao{
    public void save(){
        System.out.print("保存数据");
    }
}
类似功能的类注解

@Component注解是适用于所有的类的,这样不利于分层思想,所以Spring又提供了下面的三个注解,目前来说下面的三个注解和@Component的作用是一致的。

  • @Controller :web层
  • @Service :service层
  • @Repository :dao层

使用注解设置属性

使用注解来设置属性值时可以没有set方法,当没有set方法时就将注解添加在属性上面,如果是set方法就需要将注解添加在set方法上。

基本属性
@Component("userDao") //value是可以省略的
public class UserDao{
    //@Value("张三"),如果没有下面的set方法就直接将注解写在属性上面
    private String name;
    
    @Value("张三")
    public void setName(String name){
        this.name = name;
    }
    public void save(){
        System.out.print("保存数据");
    }
}
  • 基本属性注解使用的是@Value,后面直接跟上属性值即可。
对象属性

对于对象是使用@Autowired

public class UserService{
    //注入dao,使用注解可以没有set方法
    @Autowired
    private UserDao userDao;
    
    public void save(){
        userDao.save();
    }
}
  • @Autowired注解是设置对象类型属性的值,但是按照类型完成属性的注入

    所谓的按照类型的意思就是名称不需要一样,比如这里的service类里面的UserDao对象的名称是userDao,而UserDao类里面的注解是@Repository(“userDao222”),这里userDao222userDao是不同的,但是依然是可以将值注入进去,因为这是按照类型注入的,都是UserDao类的类型。

  • 也可以通过@Autowired注解和@qualifier注解一起使用来完成按照名称属性注入。

    @Repository("userDao1")
    public Class UserDao{
        public void save(){
            syytem.out.print("执行保存方法");
        }
    }
    
    public class UserService{
        //注入dao,使用注解可以没有set方法
        @Autowired
        @Qualifier(value="userDao1")
        private UserDao userDao;
        
        public void save(){
            userDao.save();
        }
    }
    

    在上面的例子中@Qualifier里面的value必须和@Repository里面的value是一致的才可以完成注入,这就是按照名称注入。

  • 按照名称完成注解还有一个替代的注解@Resource

    public class UserService{
        //@Resource里面使用的是name不是value
        @Resource(name="userDao1")
        private UserDao userDao;
        
        public void save(){
            userDao.save();
        }
    }
    
    

bean的其他注解

生命周期的注解

  • @PostConstruct初始化方法的注解,与使用xml注解时里面的init-method一致
  • @PreDestory销毁方法的注解

Bean的作用范围注解

  • @Scope作用范围(加载类上面的,有以下值)
    • singleton 单例模式(默认值)
    • prototype 多例模式
    • request
    • session
    • globalsession

xml与注解整合开发

正因为xml与注解各有优势,所以有时候也会有公司并不是单纯的使用xml或者注解来开发,而是结合两者一起,让他们管理不同的功能。

  • xml配置文件主要是完成ioc,也就是bean的管理
  • 注解主要完成di,也就是依赖注入,因为使用注解完成di时不需要set方法

因为bean管理是交给xml配置文件的,所以不需要开启包扫描(之前已经说过包扫描主要是扫描类上面的注解),但是属性注入也是需要注解的,此时可以在xml配置文件中写上下面的代码:

<context: annotation-config />

上面的代码开启后是在没有开启包扫描的情形下,使用注入属性的注解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值