เราได้เรียนรู้ที่จะฉีดข้อมูลการกำหนดค่าลงในตัวแปรของวัตถุด้วยวิธี @Value () นี่เป็นเพราะวัตถุนั้นโฮสต์โดยฤดูใบไม้ผลิ ดังนั้นเราควรทำอย่างไรถ้าเราต้องการใช้ค่าในไฟล์การกำหนดค่าในวิธีการคงที่?
การปฏิบัติที่ไม่ถูกต้องแบบดั้งเดิม
Application.properties
Spring.redis.host = ทดสอบ
@ComponentPublic คลาส REDISSERVICIEMPL ใช้ REDISSERVICE {... @Value ("$ {Spring.Redis.host}") โฮสต์สตริงสาธารณะแบบคงที่; @Value ("$ {Spring.redis.port}") พอร์ตจำนวนเต็มสาธารณะคงที่; ... สาธารณะคงที่ Jedispool getJedispool () {ถ้า (redisserviceimpl.host == null) {logger.info ("โฮสต์ไม่ฉีด"); -Console Prints: "โฮสต์ไม่ได้ฉีด
วิธีที่ถูกต้อง
@ComponentPublic คลาส REDISSERVICITIMPL ใช้ REDISSERVICE {... โฮสต์สตริงสาธารณะแบบคงที่; พอร์ตจำนวนเต็มสาธารณะคงที่; @Value ("$ {spring.redis.host}") โมฆะสาธารณะ sethost (โฮสต์สตริง) {redisserviceimpl.host = โฮสต์; } @Value ("$ {Spring.redis.port}") โมฆะสาธารณะ setport (พอร์ตจำนวนเต็ม) {redisserviceimpl.port = พอร์ต; } ... สาธารณะคงที่ Jedispool getJedispool () {ถ้า (redisserviceimpl.host == null) {logger.info ("โฮสต์ไม่ฉีด"); } else {logger.info ("ค่าโฮสต์คือ" + redisserviceimpl.host); -คอนโซลพิมพ์ค่าที่ฉีดอย่างถูกต้อง
ก่อให้เกิด
spring สแกนองค์ประกอบ เมื่อพบ @Component วัตถุ RedisServiceImpl จะเริ่มต้น ในระหว่างกระบวนการเริ่มต้นจะมีการสแกนคำอธิบาย @Value และค่าจะถูกฉีดลงในวิธีการ
ถัดไปวิธีการส่งผ่านค่าไปยังคลาส RedisServiceImpl ดังนั้น RedisServiceImpl จึงมีค่า-โซลูชันเชิงบวก
หาก @Value(), ถูกเพิ่มโดยตรงไปยังตัวแปรส่วนตัวแบบคงที่เมื่อเริ่มต้นวัตถุสปริงจะไม่ทำงานในชั้นเรียนเนื่องจากตัวแปรส่วนตัวแบบคงที่เป็นของคลาส - ข้อผิดพลาด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น