spring注解开发

xml方式获取beam

<bean id="person" class="com.springanotation.bean.Person">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property>

    </bean>

public class Person {
   private String name;
   private int age;
   get()  set() .....

测试类

@Test
    public void BeanXmlTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Person person = (Person) context.getBean("person");
        System.out.println(person.getName()+person.getAge());
    }

注解方式获取bean

bean的名字 直接为person()的方法名

//配置类
@Configuration  /声明spring这个是一个配置类
public class MainConfig {

    @Bean //注册一个bean
    public Person person(){
        return  new Person("lisi",20);
    }

}
@Test
    public  void AnotationTest(){
        ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);

        Person bean = (Person) context.getBean("person");
        System.out.println(“》》》》》》”+bean.getName()+bean.getAge());
    }

》》》》》》lisi20

若要改名:@Bean(“person”)

@Bean("person") //注册一个bean
    public Person person01(){
        return  new Person("lisi",20);
    }

扫描

xml

<!--    包扫描,只要标注了@Controller、@Service、@Repository、@Component的类都会被扫描到-->
    <context:component-scan base-package="com.springanotation"></context:component-scan>

注解

 //配置类
@Configuration  //告诉spring这个是一个配置类
//excludeFilters = {}排除,includeFilters = {}包括
@ComponentScan(value = "com.springanotation",excludeFilters = {},includeFilters = {})
public class MainConfig {

自动装配

Autowired:直接在属性或set方法上使用
Nullable:可以为空值
Autowired(required = false):可以为空值
Qualifier(value = “dog1”):当环境比较复杂时可以使用 @Qualifier(value = “xxx”)去配和Autowired使用,指定一个唯一的bean对象
使用java的注解也可以实现自动装配

Resource :直接在属性或set方法上使用
与Autowired的区别:

都时用来自动装配的,都可以放在属性字段上
Autowired 默认通过byType的方式实现 xml可以 “byName||byType”
Resource:默认通过byName的方式实现,如果找不到名字则通过byType

@Scope

Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围。在 Spring IoC 容器中具有以下几种作用域:基本作用域(singleton、prototype),Web 作用域(reqeust、session、globalsession),自定义作用域。

@Scope("prototype")
public class User {
}

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例。

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效。

session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效。

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效。

@Lazy

   @Lazy
   @Bean("person")
   public Person person() {
      System.out.println("给容器中添加Person....");
      return new Person("张三", 25);

   }

@Lazy用于指定该Bean是否取消预初始化。主要用于修饰Spring Bean类,用于指定该Bean的预初始化行为,使用该Annotation时可以指定一个boolean型的value属性,该属性决定是否要预初始化该Bean。

lazy代表延时加载,lazy=false,代表不延时
如果对象A中还有对象B的引用,会在A的xml映射文件中配置b的对象引用,多对一或一对多,不延时代表查询出对象A的时候,会把B对象也查询出来放到A对象的引用中,A对象中的B对象是有值的。

lazy=true代表延时,查询A对象时,不会把B对象也查询出来,只会在用到A对象中B对象时才会去查询,默认好像是false,你可以看看后台的sql语句的变化就明白了,一般需要优化效率的时候会用到。

@Conditional

条件注解,可以根据不同的条件来做出不同的事情。在Spring中条件注解可以说是设计模式中状态模式的一种体现方式,同时也是面向对象编程中多态的应用部分。

在Spring框架中,当我们使用条件注解时,我们会为每种独立的条件创建一个类,根据这个类对应的条件的成立情况我们来选择不同的任务来执行。当然我们在声明任务时,一般使用接口来声明。因为我们会在Spring的配置类中指定具体条件下的具体类。接下来,我们将来看一下Spring框架中@Conditional注解的具体使用方式。

@Import

通过导入的方式实现把实例加入springIOC容器中,通过查看@Import源码可以发现@Import注解只能注解在类上,以及唯一的参数value上可以配置3种类型的值Configuration,ImportSelector,ImportBeanDefinitionRegistrar

/**

* 给容器中注册组件;

* 1)、包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)[自己写的类]

* 2)、@Bean[导入的第三方包里面的组件]

* 3)、@Import[快速给容器中导入一个组件]

*    1)、@Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名

*    2)、ImportSelector:返回需要导入的组件的全类名数组;

*    3)、ImportBeanDefinitionRegistrar:手动注册bean到容器中

*    4)、使用Spring提供的

* FactoryBean(工厂Bean);

*    1)、默认获取到的是工厂bean调用getObject创建的对象

*    2)、要获取工厂Bean本身,我们需要给id前面加一个& &colorFactoryBean

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值