0


Spring注解解析 | P/C命名空间

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !

文章目录


注解实现自动装配

@Autowire注解

@Autowire注解,自动装配通过类型,名字如果Autowire不能唯一自动装配上属性,

则需要通过@Qualifier(value=“xxx”)

配置:

  • 导入约束
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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
        ">
  • 开启注解支持
<context:annotation-config/>

实现:

Dog/Cat类和方法的实现还是不变

  • People类 - 实现@Autowire注解、可以在属性上使用、也可以在set方式使用- 编写@Autowire注解后,set方法可以省略不写
publicclassPeople{@AutowiredprivateCat cat;@AutowiredprivateDog dog;privateString name;}
  • beans.xml
<beanid="cat"class="com.wei.pojo.Cat"/><beanid="dog"class="com.wei.pojo.Dog"/><beanid="people"class="com.wei.pojo.People"/>
  • @Nullable 字段标记了这个注解,说明这个字段可以为null

可以在带参构造中使用@Nullable

publicPeople(@NullableString name){this.name = name;}

@Qualifier注解

指定一个唯一的bean对象注入

  • People类
publicclassPeople{@Autowired@Qualifier(value ="cat111")privateCat cat;@Autowired@Qualifier(value ="dog222")privateDog dog;privateString name;}
  • beans.xml
<beanid="cat"class="com.wei.pojo.Cat"/><beanid="cat111"class="com.wei.pojo.Cat"/><beanid="dog"class="com.wei.pojo.Dog"/><beanid="dog222"class="com.wei.pojo.Dog"/><beanid="people"class="com.wei.pojo.People"/>

@Resource注解

默认按照名字装配Bean,即会按照name属性的值来找到具有相同id的Bean Definition 并注入

  • People类
publicclassPeople{@Resource(name ="cat2")privateCat cat;@ResourceprivateDog dog;privateString name;}
  • beans.xml
<bean id="cat1"class="com.wei.pojo.Cat"/><bean id="cat2"class="com.wei.pojo.Cat"/><bean id="dog"class="com.wei.pojo.Dog"/><bean id="people"class="com.wei.pojo.People"/>

总结:

  • @Autowire 通过byType方式实现,而且必须要求对象存在,不能为null
  • @Resource 默认通过byname的方式实现,如果找不到名字,则通过byType实现,都不行则报错

@Component

放在类上,说明这个类被Spring管理了,等同于bean配置

  • Java类

此处使用注解@Component @Value 则 beans.xml则无需书写bean

//等价于<bean id="user" class="com.wei.pojo.User       Component:组件@ComponentpublicclassUser{@Value("wei_shuo")//相当于 <property name="name" value="wei_shuo"/>publicString name;}

@Component的衍生注解,在web开发中,按照MVC三层架构分层

四个注解功能、作用

相同

,都是代表将某个类注册到Spring中、装配Bean

  • pojo —> @Component
  • dao —> @Resource
  • service —> @Service
  • controller —> @Controller

@Scope

作用域注解,限定Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声明scope配置项,可以灵活定义Bean的作用范围

@ComponentScan

@ComponentScan(“com.wei.pojo”) 扫描包

@Bean

  • 注册一个bean,就相当于bean标签
  • 方法的名字,相当于bean标签的id属性
  • 方法的返回值,相当于bean标签的class属性
@BeanpublicUsergetUser(){returnnewUser();//就是返回要注入到bean的对象}

@Configuration

  • @Configuration注解会被Spring容器托管,因为它本身就是一个@Component
  • @Configuration 代表这是一个配置类,相当于beans.xml
@Configuration@ComponentScan("com.wei.pojo")@Import(WeiConfig2.class)publicclassWeiConfig{@BeanpublicUsergetUser(){returnnewUser();}}

@Value

属性注入值

  • Java类

此处使用@Scope注解使用prototype多实例注解模式

//等价于<bean id="user" class="com.wei.pojo.User       Component:组件@Component@Scope("prototype")//作用域注解publicclassUser{@Value("wei_shuo")//相当于 <property name="name" value="wei_shuo"/>publicString name;}

P命名空间注入

p命名空间注入,对应Set注入方式

  • 需要创建set/get方法

p命名空间注入,可以直接注入属性的值:property

  • User类
packagecom.wei.pojo;publicclassUser{privateString name;privateint age;publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicintgetAge(){return age;}publicvoidsetAge(int age){this.age = age;}@OverridepublicStringtoString(){return"User{"+"name='"+ name +'\''+", age="+ age +'}';}}
  • userbeans.xml文件
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--上面添加 xmlns:p="http://www.springframework.org/schema/p" --><!--p命名空间注入,可以直接注入属性的值:property--><beanid="user"class="com.wei.pojo.User"p:name="秦疆"p:age="18"/></beans>
  • Test测试
ApplicationContext context =newClassPathXmlApplicationContext("userbeans.xml");//        指定类型User.class则不需要强制转换User user = context.getBean("user",User.class);//        强制转换//        User user = (User) context.getBean("user");System.out.println(user);

C命名空间注入

c命名空间注入,对应构造器注入

  • 需要创建无参/带参构造方法

c命名空间注入,通过构造器 注入:construct-args

  • User类

此处增加无参/带参构造方法

publicclassUser{privateString name;privateint age;publicUser(){}publicUser(String name,int age){this.name = name;this.age = age;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicintgetAge(){return age;}publicvoidsetAge(int age){this.age = age;}@OverridepublicStringtoString(){return"User{"+"name='"+ name +'\''+", age="+ age +'}';}}
  • userbeans.xml文件
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--上面添加  xmlns:c="http://www.springframework.org/schema/c" --><!--c命名空间注入,通过构造器 注入:construct-args--><beanid="user2"class="com.wei.pojo.User"c:name="wei_shuo"c:age="18"/></beans>
  • Test测试
ApplicationContext context =newClassPathXmlApplicationContext("userbeans.xml");User user = context.getBean("user2",User.class);System.out.println(user);

总结:

p命名空间注入/c命名空间注入 都需要导入xml约束,不能直接使用

Spring开发包名解释

  • dao包

数据库操作,crud 即增删改查,对于数据库的增删改查的操作都在这里

  • pojo包

简单java对象

  • service包

service 服务器层,也叫业务逻辑层,调用dao中的方法

Java方式配置

使用Java的方式配置Spring,也就是不写bean.xml配置,使用注解代替

  • 实体列
//@Configurable放在类上,说明这个类被Spring管理了,等同于bean配置,注册到容器中@ConfigurablepublicclassUser{privateString name;publicStringgetName(){return name;}@Value("CSDN")//属性注入值publicvoidsetName(String name){this.name = name;}@OverridepublicStringtoString(){return"User{"+"name='"+ name +'\''+'}';}}
  • 配置文件> > - @Configuration注解会被Spring容器托管,因为它本身就是一个@Component> - @Configuration 代表这是一个配置类,相当于beans.xml> - @Import注解,功能就是和Spring XML里面的一样. @Import注解是用来导入配置类或者一些需要前置加载的类.通俗的将就是将类放入到IOC容器中> - @Bean注解,注册一个bean,就相当于bean标签,方法的名字,相当于bean标签的id属性,方法的返回值,相当于bean标签的class属性
//@Configuration注解会被Spring容器托管,因为它本身就是一个@Component//@Configuration 代表这是一个配置类,相当于beans.xml@Configuration@ComponentScan("com.wei.pojo")//扫描包@Import(WeiConfig2.class)//@Import注解,功能就是和Spring XML里面的一样. @Import注解是用来导入配置类或者一些需要前置加载的类.通俗的将就是将类放入到IOC容器中publicclassWeiConfig{//注册一个bean,就相当于bean标签//方法的名字,相当于bean标签的id属性//方法的返回值,相当于bean标签的class属性@BeanpublicUsergetUser(){returnnewUser();//就是返回要注入到bean的对象}}
  • 测试类
publicclassMyTest{//如果完全使用了配置类方式去做,只能通过AnnotationConfig 上下文来获取容器,通过配置类的class对象加载publicstaticvoidmain(String[] args){ApplicationContext context =newAnnotationConfigApplicationContext(WeiConfig.class);User getUser =(User) context.getBean("getUser");//此处取方法名System.out.println(getUser.getName());}}

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——

点赞

👍

收藏

⭐️

评论

📝

冲冲冲

🤞


在这里插入图片描述

标签: spring java bean

本文转载自: https://blog.csdn.net/weixin_62765017/article/details/127456652
版权归原作者 wei_shuo 所有, 如有侵权,请联系我们删除。

“Spring注解解析 | P/C命名空间”的评论:

还没有评论