spring 常用注解使用

1> @Autowired自动装配,其作用是为了消除代码的Java代码里面的吸气/设定部与豆属性中的属性。能加在方法上,字段及构造方法上当然,吸气看个人需求,如果私有属性需要对外提供的话,应当予以保留。默认按类型匹配的方式,在容器查找匹配的豆,当有且仅有一个匹配的豆时,弹簧将其注入@Autowired标注的变量中。如果有有多个匹配的bean的配合注解使用 @Qualifier( 指定 bean id name) )可能不存在的实例@Autowired (required =  false ) 



@Service( “itemService”)
公共类ItemServiceImpl实现ItemService {
//注解方式1:@Autowired加载方法上
// private ItemDao itemDao;
//
// @Autowired //根据形参的类型从spring容器中找符合ItemDao类型的bean,赋值形参
// @Qualifier(“itemDao1”)//如果不加这个ItemDao会有两个实现类spring不能知道注入哪个实现类报错
// public void setItemDao(ItemDao itemDao){
// this.itemDao = itemDao;
//}

//注解方式2:直接在字段上添加注解
// @Autowired
// @Qualifier(“itemDao2”)
// private ItemDao itemDao;

//注解方式3使用jdk注解指定名称
// @Resource(name =“itemDao2”)
// private ItemDao itemDao;


//注解方式4使用jdk注解指定类型
    @Resource(type = ItemDaoImpl2.class)
    private ItemDao itemDao;

    @覆盖
    public void insertItem(Item item){
        //调用dao
        itemDao.insertItem(项目);
    }


}

autowried 资源的区别

都可以完成属性注入, autowried 春天提供的,资源JavaEE的规范,如果系统的只有一个类型,可以使用自动装配Autowired ,如果有多个类型,需要自动装配Autowired 预选赛结合使用
为了系统-和春天解耦合,建议使用资源,因为资源jdk 的规范。

JSR-250标准注解,推荐使用它来代替弹簧专有的@Autowired注解。@资源的作用相当于@Autowired,只不过@Autowired按byType的自动注入,而@Resource默认按绰号自动注入,如果找不到再按类型找到bean。@Resource有两个属性是比较重要的,分别是名称和类型,Spring将@Resource注解的名称属性解析为bean的名字,而type为属性则解析为bean的类型。
@Resource装配的英文顺序
①如果同时指定了名称和类型,则从弹簧上下文中找到唯一匹配的豆进行装配,则找不到抛出异常
②如果指定了名称,则从上下文中查找名称(ID)匹配的豆进行装配,则找不到抛出异常
③如果指定了类型,则从上下文中找到类型匹配的唯一豆进行装配,找不到或者找到多个,抛出都会异常
④如果既没有指定名称,又没有指定型,则自动按照绰号方式进行装配(见②);如果没有匹配,则回退为一个原始类型(userDAO的)进行匹配,如果匹配 自动装配;



2> @PostConstruct和@PreDestory 

实现初始化和销毁豆之前进行的操作,只能有一个方法可以用此注释进行注释,方法不能有参数,返回值必需是无效的,方法需要是非静态的。

@服务
公共类TestService { 

    @PostConstruct  
    public void init(){  
        的System.out.println( “初始化”);  
    }  
      
    @PreDestroy  
    public void dostory(){  
        的System.out.println( “销毁”);  
    }  
}

@PostConstruct:在构造函数之后执行,init-method方法之前执行,且只会执行一次。
@PreDestory:注解的方法在destory()方法调用后得到执行。
引深一点,Spring容器中的Bean是有生命周期的,Spring允许在Bean中初始化完成后((执行构造函数))以及Bean销毁前(关闭容器)执行特定的操作,

常用的设定方式有以下四种:

1.通过实现InitializingBean / DisposableBean接口来定制初始化之后/销毁之前的操作方法;
2.通过<bean>元素的init-method / destroy-method属性指定初始化之后/销毁之前调用的操作方法(@Bean@Bean指定指定init-methodinit-method和和destroy-methoddestroy-method);

3.在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用(注意:要配合xml中的<context:annotation-config />才能生效)
4.在配置文件中配置全局初始化完成后的,  Bean销毁前执行方法 xml中配置: default-init-method =“init”default-destroy-method =“teardown”>

当配置了init-method方法时,default-init-method不生效,否则相反
注意:default-init-method指定的方法可以在实体类中没有,但是init-method必须的有否则报错
执行先后顺序。构造函数> @PostConstruct> InitializingBean> init方法


3> @Lazy(真)

    用于指定该豆是否取消预初始化,用于注解类,延迟初始化

4> context:annotation-config和context:component-scan区别

 context:annotation-config将在配置文件中添加上下文:annotation-config标签使@资源,@ PostConstruct,@ PreDestroy,@ Autowired注解生效,主要任务是激活注解。


上下文:注解配置只针对容器中已经存在豆
上下文:组分扫描除了具有<上下文:注解的配置/>的功能之外,还具有自动将带有@部件,@服务,@库等注解的对象注册到春天容器中的功能。

如果使用了<context:component-scan>所以可以去掉<context:annotation-config>
<context:component-scan base-package =“com.cn.hnust,com.cn.fpc,com.cn.zl”/ >多个包逗号隔开。

5>单元测试   spring-test.jar spring-test-3.2.0.RELEASE.jar  

import cn.itcast.spring.pojo.Orders;
import cn.itcast.spring.service.OrderService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
//基于SpringJUnit4ClassRunner会读取配置文件,自动创建容器,将容器中的豆自动注入到此测试对象
@RunWith(SpringJUnit4ClassRunner.class)来
@ContextConfiguration(位置= { “类路径:applicationContext.xml中”})
公共类springJunit {

    @Autowired
    OrderService orderService;

    @之前
    public void before(){
    System.out.println(“hello world”); //执行测之前先执行
    }

    @测试
    public void saveOrder(){
        orderService.saveOrder(new Orders());
    }

}

applicationContext.getBean( '')指定的bean ID名称即可获取

@WebServlet(value={"/hello"})=@WebServlet( {"/hello"})= @WebServlet( "/hello")  value默认可以去除

value对应的值是String[ ]  如果是单个字符串的情况下也能不用{ }


spring注解资料:: https://www.cnblogs.com/digdeep/p/4525567.html

                 https://blog.csdn.net/achenyuan/article/details/72786759

猜你喜欢

转载自blog.csdn.net/qq_31459039/article/details/80078580