Spring:注解知识点1

 

用户自定义类型注入: 

注解注入:

 

User类:

package com.baizhiedu.bean;

import org.springframework.stereotype.Component;

import java.io.Serializable;
//注解
@Component("u") //添加u默认值就不是user了
public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserDAO

package com.baizhiedu.injection;

public interface UserDAO {
    public void save();
}

UserDAOImpl:

package com.baizhiedu.injection;

import org.springframework.stereotype.Repository;

@Repository //@Component的衍生注解 @Repository 适用于专门的dao注解产生的对象
public class UserDAOImpl implements UserDAO {
    @Override
    public void save() {
        System.out.println("UserDAOImpl.save");
    }
}

UserService

package com.baizhiedu.injection;

public interface UserService {
    public void register();
}

UserServiceImpl:

package com.baizhiedu.injection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service //@Component的衍生注解 @Service注解产生Service对象
public class UserServiceImpl implements UserService {
    private UserDAO userDAO;

    public UserDAO getUserDAO() {
        return userDAO;
    }

    @Autowired //注入UserDAO 运用@Autowired注解
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    @Override
    public void register() {
        userDAO.save();
    }
}
package com.baizhiedu.injection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.annotation.Resources;

@Service //@Component的衍生注解 @Service注解产生Service对象
public class UserServiceImpl implements UserService {
    //@Autowired//这个注解也可以放到成员变量之上,基于反射进行注入

    @Resource(name="userDAOImpl")//JavaEE引入的注解,name属性的id值必须和UserDAOImpl的id
    private UserDAO userDAO;

    public UserDAO getUserDAO() {
        return userDAO;
    }

    //@Autowired //注入UserDAO 运用@Autowired注解  注入对象的类型必须时目标成员类型相同或者使其子类(实现类)
    //@Qualifier("userDAOImpl")//配合@Autowired,基于名字进行注入
    public void setUserDAO(UserDAO userDAO) {
        System.out.println("UserServiceImpl.setUserDAO");//验证spring有没有调用set方法为成员变量赋值
        this.userDAO = userDAO;
    }

    @Override
    public void register() {
        userDAO.save();
    }
}

Account:

package com.baizhiedu.lazy;

import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@Component
@Lazy  //延迟在工厂创建的时候对Account对象的创建
public class Account {
    public Account() {
        System.out.println("Account.Account");
    }
}

Product:

package com.baizhiedu.life;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Product {

    @PostConstruct  //注解表明初始化方法
    public void myInit(){
        System.out.println("Product.myInit");
    }

    @PreDestroy  //注解 表明销毁方法
    public void myDestory(){
        System.out.println("Product.myDestory");
    }
}

Customer:

package com.baizhiedu.scope;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component//注解创建对象
@Scope("singleton")//控制对象创建爱你次数 singleton只会创建一次 prototype会创建多次
public class Customer {
}

applicationContext.xml:

<?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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       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/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">


<!--
  id:名字唯一
  class属性:类的全限定名
  通过写bean标签告诉工厂生产的对象
-->

<!--    让spring框架在设置的包及其子包中扫描对应的注解,使其生效-->
    <context:component-scan base-package="com.baizhiedu"/>

<!--    通过配置文件可以覆注解的内容-->
    <bean id="u" class="com.baizhiedu.bean.User">
        <property name="id" value="10"/>
    </bean>
</beans>

TestAnnotation:

package com.baizhiedu;

import com.baizhiedu.bean.User;
import com.baizhiedu.injection.UserService;
import com.baizhiedu.lazy.Account;
import com.baizhiedu.scope.Customer;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnnotation {
    /*
      用于测试:@Component注解
     */
    @Test
    public void test1(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");//获得工厂
        //User user=(User) ctx.getBean("user");//加入注解之后,通过id的默认值User的首字母小写,确认id:user 当User类中的注解@Component("u")  这里通过id:u创建User对象
        User user=(User) ctx.getBean("u");
        System.out.println("user"+user);
        System.out.println("user id="+user.getId());
    }
    /*
      用于测试@Scope注解 控制对象创建次数
     */
    @Test
    public void test2(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");//获得工厂
        Customer customer1 = (Customer)ctx.getBean("customer");
        Customer customer2 = (Customer)ctx.getBean("customer");

        System.out.println(customer1);
        System.out.println(customer2);
    }
    /*
      用于测试Lazy注解
    */
    @Test
    public void test3(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");//获得工厂的时候,创建单实例对象
        //如果想要延迟对象在工厂创建的时候创建,可以用到Lazy注解,延迟创建,在下面获取它的时候才会创建
        Account account =(Account) ctx.getBean("account");//

    }
    /*
      测试:声明周期相关注解
     */
    @Test
    public void test4(){
        ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");

        ctx.close();//工厂关闭
    }

    /*
      测试:@Autowrited注解 注入 和基于名字进行注入,JavaEE注入测试
     */
    @Test
    public void test5(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");
        UserService userServiceImpl=(UserService)ctx.getBean("userServiceImpl");

        userServiceImpl.register();
    }
}

Test1:

Test2:

Test3 

 

 Test4

 Test5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值