栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring注解

一、注解方式实现IOC(就是将创建对象的权利和对象的生命周期交给Spring容器,可以用另一种方式创建对象)

实际上就是创建对象

1.需要导入4个核心包,一个日志包和一个扫描包

2.创建applicationContext.xml,开启包扫描
   
  • 如果扫描到该类被component注释,则加载到Spring容器,也就是在Spring容器中new出了对象(利用反射)
//获取字节码文件对象
    Class aClass = Class.forName("com.shengqi.entity.Person");
//通过无参构造获取对象
    Person person = (Person) aClass.newInstance();
        map.put(id,person)
3.在希望被spring管理的类上面添加注解@Component
@Component("abc")指定ID
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserController userController = (UserController) context.getBean("abc");

注意点:通常情况注解注册的bean使用类名首字母小写为bean的id(Person --> id是person)

但是如果类名的第二个字母是大写,首字母保留原样(NBA类 -->id还是NBA)
延伸注解:

@component 普通类 下面三种其实也就是component
@Controller controller层的类
@Service  service层的类
@Repository  dao层的类

二、注解方式实现DI(也就是属性值注入) 1.内置类型的注入 1.1 基础类型

1.直接注入

	@Value("张三")// 不依赖set方法和构造方法,直接可以赋值成功
    private String username;
    @Value("18")
    private int age;

2.编写文件注入
src下创建name.properties

name=zs
age=18

或者在实体类中加注解

@PropertySource("classpath:name.properties")直接加载到Spring容器,从类路径下去加载properties文件

实体类使用文件注入

    @Value("${name}")
    private String name;
    @Value("${age}")
    private  Integer age;

xlm核心配置加载文件

 
2.复杂类型(了解)

        帅哥
        美女
    
    
        杨过
        gfs
    
    
        
        
    
    
        吕布
        周瑜
    
@Value("#{@list}")
    private List list;
    @Value("#{@set}")
    private Set set;
    @Value("#{@map}")
    private Map map;
    @Value("#{@properties}")
    private Properties properties;
3.自定义类型

创建Cat类,添加到Spring容器中

@Component
public class Cat {
}

在Person类中注入(两种方式注入值,Autowired用的较多)

	@Autowired // 默认按照(先)byType和byName
    private Cat cat;
	@Resource // 默认按照byName和byType
4.解释

@Autowired
自动去spring容器中寻找对应类型的内容进行匹配,如果匹配不到,那么根据属性名去spring容器中匹配,如果还是匹配不到,直接抛出异常

如果注解的是一个接口,那么先按照接口的类型去容器中匹配,然后按照接口的属性名去容器中匹配
然后去容器中寻找接口的实现类进行匹配

@Resource
默认先使用byName的方式,再使用byType的方式

@Resource注解中指定name,就是指定注入指定id的标签

@Qualifier(“abc”)
指定要注入哪个id的bean

三.补充 1.单例多例
@Scope(value = "prototype")// 设置多例
//@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)// 设置多例的第二种写法
2.懒加载
@Lazy
3.初始化方法和销毁方法
@PostConstruct//在初始化时执行
@PreDestroy// 销毁时执行
   ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        prodDao bean = context.getBean(prodDao.class);
        System.out.println(bean);
        context.close();销毁时,需要关闭
4.Spring的核心配置类

@Configuration // 这个注解配置在类上面表示这个类就是Spring的核心配置类

@Bean//这个注解用在方法上表示要将该方法的返回值放入Spring容器中

entity

@Configuration // 这个注解配置在类上面表示这个类就是Spring的核心配置类
public class MyConfig {

    @Bean//这个注解用在方法上表示要将该方法的返回值放入Spring容器中
    public Person getPerson(){
        Person p = new Person();
        p.setAge(18);
        p.setName("周杰");
        return p;
    }
}

测试

public static void main(String[] args) {
        // 加载Spring的核心配置类
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
        Person person = applicationContext.getBean(Person.class);
        System.out.println(person);
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644821.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号