ioc的注解开发

xml开发与ioc开发的优缺点

xml管理bean比较容易,但配置麻烦  
使用ioc注解就比较难管理,的到类内部去看具体的注解,但操作简单  
一般都是两种结合一起开发  

使用之前

必须添加约束之类的,直接贴代码吧

<?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是约束-->
       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">
   
    <!--开启注解扫描,加上才能用ioc注解-->
    <context:component-scan base-package="ioc的注解开发"/>
</beans>

常用到的注释

@Component(id)加载类的前面,与此相似的还有
@Controller :加在WEB 层
@Service :业务层
@Repository :持久层

@Component("user")
@Scope("singleton")
/*
* 相当于在xml配置bean即
* <bean id="user" class="ioc的注解开发.userDao" />
* */
public class userDao {

    private String name;

    public userDao() {
    }

    public userDao(String name) {
        this.name = name;
    }

    @PostConstruct
    public void init(){
        System.out.println(name+"被初始化");
    }

    @PreDestroy
    public void destory(){
        System.out.println(name+"被销毁");
    }

    public String getName() {
        return name;
    }

    @Value("鲁班七号")  //赋值
    public void setName(String name) {
        this.name = name;
    }

    public void save() {
        System.out.println("在user里执行了save");
    }
}

@Scope
指定bean的作用范围(默认singleton,还有prototype,session…)
@PostConstruct 指定bean的初始化
@PreDestroy 指定bean的销毁方法

类的属性依赖注入(可以省去set方法)
对于变量使用
@Value(value)
对于对象
@Resource(相当于@Qualifier+@Autowired ) 注解默认按名称装配。名称 可以通过name属性指定,如果没有指定name属性,
默认取属性的名称作为bean名称寻找依赖对象
@Qualifier(“user”) 和@Autowired配合使用 指定名称
@Autowired 指定类型

测试一下吧
下面是代码

package ioc的注解开发;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

/**
 * Created by Administrator on 2018/10/6.
 */
@Controller("user2")
public class userDao2 {
    @Resource(name="user")
    private userDao user;

    public void save(){
        System.out.println("在user2里执行了save");
        user.save();
    }
}

测试代码

package ioc的注解开发;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;

import javax.annotation.Resource;

/**
 * Created by Administrator on 2018/10/5.
 */
public class testDemo {


    @Test
    public void testDemo1(){
        ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
        userDao user= (userDao) apc.getBean("user");
        System.out.println(user.getName());
        apc.close();
    }

    @Test
    public void testDemo2(){
        /*
        @Resource相当为属性指定了依赖,Spring会自动为user注入依赖
         */
        ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
        userDao2 user2= (userDao2) apc.getBean("user2");
        user2.save();
        apc.close();
    }

}

运行testDemo()

猜你喜欢

转载自blog.csdn.net/weixin_36957153/article/details/82950171